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