背景:
阅读新闻

SQL Server 2005数据库的排序规则

  作者: 今日评论: [字体: ]

SQLSEVER2005中使用的排序规则是SQL_Latin1_General_CP1_CI_AS,而不是可以正确显示汉字的三种排序规则:Chinese_PRC_BIN,Chinese_PRC_CI_AS,Chinese_PRC_CS_AS

在将SQL Server 2005中将排序规则改成Chinese_PRC_CI_AS,问题解决。
MS对排序规则的描述:
在 Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制。
序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。

也就是说,在SQL Server排序规则实际上就是字符编码。
在查询分析器内执行下面语句,可以得到SQL Server支持的所有排序规则。
 1.select * from ::fn_helpcollations() 
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:Chinese_PRC_CS_AI_WS 。前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆体字UNICODE的排序规则。
排序规则的后半部份即后缀含义:

_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分 
_KI(KS) 是否区分假名类型,KI不区分,KS区分 
_WI(WS) 是否区分宽度 WI不区分,WS区分 

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。

区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。

区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。

区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

结论:

一:对于存在汉字显示??,同时又不想更改数据库上的排序规则,又想要正确显示出汉字的话,建议在设计时全部使用Unicode类型字段,也就是那些以N开头的字段类型,比如nChar,nVarchar,才可以正确显示汉字。

二:如果不想更改排序规则,又不想更改字段类型,那么就要更改SQL语句,对于所有的汉字,前面也要加上N才可以正确显示。具体的方法请参考下面两条语句:

查询:select * from tb_Cust where FirstName=N'汪'
插入:insert tb_Cust(FirstName,LastName,Sex) values(N'汪',N'鑫昊',N'男')

 

------------------------------------------

第二篇

sql排序规则

如果要是区分大小写的话,就要改变数据库的排序规则。

1、查看系统中所支持的全部排序规则列表

SELECT * FROM ::fn_helpcollations()

2、查看当前系统的排序规则.

SELECT SERVERPROPERTY('Collation')

3、改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)

语法:
use master
go
ALTER DATABASE 数据库名 COLLATE 排序规则名
例子:
use master
go
ALTER DATABASE luwanzhufa COLLATE Chinese_PRC_CS_AS

* 我查过。Chinese_PRC_CS_AS这个是简体中文。而且区分大小写的排序规则。

192 Japanese_BIN 二进制顺序、用于 932(日文)字符集。
193 Japanese_CI_AS 字典顺序、不区分大小写、用于 932(日文)字符集。
200 Japanese_CS_AS 字典顺序、区分大小写、用于 932(日文)字符集。
198 Chinese_PRC_BIN 二进制顺序、用于 936(简体中文)字符集。
199 Chinese_PRC_CI_AS 字典顺序、不区分大小写、用于 936(简体中文)字符集。
203 Chinese_PRC_CS_AS 字典顺序、区分大小写、用于 936(简体中文)字符集。

如:
ALTER DATABASE database
COLLATE Chinese_prc_ci_as

 

---------------
Windows 排序规则名称
使用下表使排序规则设置与另一个 Windows 区域设置保持一致。

在"控制面板"的"区域设置"应用程序(Microsoft® Windows NT® 4.0、Microsoft Windows 98® 和 Microsoft Windows 95)或"区域选项"应用程序 (Microsoft Windows 2000) 中找到 Windows 区域设置名称,然后使用此表找到相应的排序规则指示器和代码页。


Windows 区域设置 LCID(区域设置 ID)
排序规则指示器 代码页
南非荷兰语 0xx436 Latin1_General 1252
阿尔巴尼亚语 0x41C Albanian 1250
阿拉伯语(沙特阿拉伯) 0x401 Arabic 1256
阿拉伯语(伊拉克) 0x801 Arabic 1256
阿拉伯语(埃及) 0xC01 Arabic 1256
阿拉伯语(利比亚) 0x1001 Arabic 1256
阿拉伯语(阿尔及利亚) 0x1401 Arabic 1256
阿拉伯语(摩洛哥) 0x1801 Arabic 1256
阿拉伯语(突尼斯) 0x1C01 Arabic 1256
阿拉伯语(阿曼) 0x2001 Arabic 1256
阿拉伯语(也门) 0x2401 Arabic 1256
阿拉伯语(叙利亚) 0x2801 Arabic 1256
阿拉伯语(约旦) 0x2C01 Arabic 1256
阿拉伯语(黎巴嫩) 0x3001 Arabic 1256
阿拉伯语(科威特) 0x3401 Arabic 1256
阿拉伯语(阿拉伯联合酋长国) 0x3801 Arabic 1256
阿拉伯语(巴林群岛) 0x3C01 Arabic 1256
阿拉伯语(卡塔尔) 0x4001 Arabic 1256
巴斯克语 0x42D Latin1_General 1252
白俄罗斯语 0x423 Cyrillic_General 1251
保加利亚语 0x402 Cyrillic_General 1251
加泰罗尼亚语 0x403 Latin1_General 1252
繁体中文(台湾) 0x30404 Chinese_Taiwan_Bopomofo 950
繁体中文(台湾) 0x404 Chinese_Taiwan_Stroke 950
简体中文(中华人民共和国) 0x804 Chinese_PRC 936
简体中文(中华人民共和国) 0x20804 Chinese_PRC_Stroke 936
中文(新加坡) 0x1004 Chinese_PRC 936
克罗地亚语 0x41a Croatian 1250
捷克语 0x405 Czech 1250
丹麦语 0x406 Danish_Norwegian 1252
荷兰语(标准) 0x413 Latin1_General 1252
荷兰语(比利时) 0x813 Latin1_General 1252
英语(美国) 0x409 Latin1_General 1252
英语(英国) 0x809 Latin1_General 1252
英语(加拿大) 0x1009 Latin1_General 1252
英语(新西兰) 0x1409 Latin1_General 1252
英语(澳大利亚) 0xC09 Latin1_General 1252
英语(爱尔兰) 0x1809 Latin1_General 1252
英语(南非) 0x1C09 Latin1_General 1252
英语(加勒比) 0x2409 Latin1_General 1252
英语(牙买加) 0x2009 Latin1_General 1252
爱沙尼亚语 0x425 Estonian 1257
法罗语 0x0438 Latin1_General 1252
现代波斯语 0x429 Arabic 1256
芬兰语 0x40B Finnish_Swedish 1252
法语(标准) 0x40C French 1252
法语(比利时) 0x80C French 1252
法语(瑞士) 0x100C French 1252
法语(加拿大) 0xC0C French 1252
法语(卢森堡) 0x140C French 1252
乔治亚语(现代) 0x10437 Georgian_Modern_Sort 1252
德语(电话簿排序) 0x10407 German_PhoneBook 1252
德语(标准) 0x407 Latin1_General 1252
德语(瑞士) 0x807 Latin1_General 1252
德语(澳大利亚) 0xC07 Latin1_General 1252
德语(卢森堡) 0x1007 Latin1_General 1252
德语(列支敦士登) 0x1407 Latin1_General 1252
希腊语 0x408 Greek 1253
希伯来语 0x40D Hebrew 1255
印地语 0x439 Hindi 仅 Unicode
匈牙利语 0x40E Hungarian 1250
匈牙利语 0x104E Hungarian_Technical 1250
冰岛语 0x40F Icelandic 1252
印度尼西亚语 0x421 Latin1_General 1252
意大利 0x410 Latin1_General 1252
意大利语(瑞士) 0x810 Latin1_General 1252
日语 0x411 Japanese 932
日语 (Unicode) 0x10411 Japanese_Unicode 932
朝鲜语 (Extended Wansung) 0x412 Korean_Wansung 949
朝鲜语 0x412 Korean_Wansung_Unicode 949
拉脱维亚语 0x426 Latvian 1257
立陶宛语 0x427 Lithuanian 1257
立陶宛语 0x827 Lithuanian_Classic 1257
马其顿语 0x41C Cyrillic_General 1251
挪威语(博克马尔语) 0x414 Danish_Norwegian 1252
挪威语(尼诺斯克) 0x814 Danish_Norwegian 1252
波兰语 0x415 Polish 1250
葡萄牙语(标准) 0x816 Latin1_General 1252
葡萄牙语(巴西) 0x416 Latin1_General 1252
罗马尼亚语 0x418 Romanian 1250
俄语 0x419 Cyrillic_General 1251
塞尔维亚语(拉丁) 0x81A Cyrillic_General 1251
塞尔维亚语(西里尔) 0xC1A Cyrillic_General 1251
斯洛伐克语 0x41B Slovak 1250
斯洛文尼亚语 0x424 Slovenian 1250
西班牙语(墨西哥) 0x80A Traditional_Spanish 1252
西班牙语(传统) 0x40A Traditional_Spanish 1252
西班牙语(现代) 0xC0A Modern_Spanish 1252
西班牙语(危地马拉) 0x100A Modern_Spanish 1252
西班牙语(哥斯达黎加) 0x140A Modern_Spanish 1252
西班牙语(巴拿马) 0x180A Modern_Spanish 1252
西班牙语(多米尼加共和国) 0x1C0A Modern_Spanish 1252
西班牙语(委内瑞拉) 0x200A Modern_Spanish 1252
西班牙语(哥伦比亚) 0x240A Modern_Spanish 1252
西班牙语(秘鲁) 0x280A Modern_Spanish 1252
西班牙语(阿根廷) 0x2C0A Modern_Spanish 1252
西班牙语(厄瓜多尔) 0x300A Modern_Spanish 1252
西班牙语(智利) 0x340A Modern_Spanish 1252
西班牙语(乌拉圭) 0x380A Modern_Spanish 1252
西班牙语(巴拉圭) 0x3C0A Modern_Spanish 1252
西班牙语(玻利维亚) 0x400A Modern_Spanish 1252
瑞典语 0x41D Finnish_Swedish 1252
泰语 0x41E Thai 874
土耳其语 0x41F Turkish 1254
乌克兰语 0x422 Ukrainian 1251
乌尔都语 0x420 Arabic 1256
越南语 0x42A Vietnamese 1258
----------------------------------------
Windows 排序规则排序样式
在"排序规则设置"屏幕上,可以选择"二进制"排序次序,也可以定义用于选定的排序规则指示器(Windows 排序规则名称)的排序样式。

 

说明 对于 Windows 排序规则,nchar、nvarchar 和 ntext 数据类型具有与 char、varchar 和 text 数据类型相同的排序行为。有关更多信息,请参见 SQL Server 排序规则基础知识。


排序次序 描述
二进制 根据为每个字符所定义的位模式对 Microsoft® SQL Server™ 表中的数据进行排序和比较。二进制排序次序区分大小写,先小写字母后大写字母并且区分重音。这是最快的排序次序。
如果不选中此选项,SQL Server 将按照字典中定义的相关语言或字母表的排序及比较规则进行排序。

区分大小写 指定 SQL Server 区分大小写字母。
如果不选中此规则选项,SQL Server 会认为大小写字母等价。如果不选中"区分大小写"选项,SQL Server 就不定义大小写字母之间的高低排序关系。

区分重音 指定 SQL Server 区分重音和非重音字符。例如,"a"不等同于"á"。
如果不选中此选项,SQL Server 会认为重音与相应的非重音字母等价。

区分假名 指定 SQL Server 区分两种类型的日文假名字符:平假名和片假名。
如果没有选择,SQL Server 会认为平假名和片假名等价。

区分宽度 指定 SQL Server 区分相同字符的单字节表示法(半角)和双字节表示法(全角)。
如果没有选择,则 SQL Server 将认为相同字符的单字节表示法和双字节表示法等效。

来源:
录入日期:[2012/02/13 20:27:00]
收藏 推荐 打印 | 录入:mikebai | 阅读:
文章评论      
正在加载评论列表...
评论关闭