sql排序规则如果要是区分大小写的话,就要改变数据库的排序规则。1、查看系统中所支持的全部排序规则列表SELECT * FROM ::fn_helpcollations()2、查看当前系统的排序规则.SELECT SERVERPROPERTY('Collation')3、改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)语法:use mastergoALTER DATABASE 数据库名 COLLATE 排序规则名例子:use mastergoALTER 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 将认为相同字符的单字节表示法和双字节表示法等效。
字符集是字符的编码,而排序规则则是将字符以何种语言来进行排序,比如以中文排序,以拉丁文来排序,还可以区分大小写排序等等
SQLSERVER支持的字符集是cp936
cp936即 code page 936(代码页936)是以GBK(国标扩展字符集)为基础的编码。
GB2312(国标字符集)只是GBK的一部分。GB2312只支持常用的汉字,而且是简体字。GBK支持繁体字和生僻字。
所以说字符集跟排序规则基本上没有关系
-----------------------------------------------------------------------------------------------------
查看当前数据库实例的排序规则:SELECT SERVERPROPERTY ('Collation' )
查看当前数据库的排序规则,在数据库属性里查看,如果没有修改数据库的排序规则,默认继承数据库实例的排序规则
今天同事的新安装的SQL Server 2008 R2 写入中文乱码,发现是排序代码的问题
--通过修改字符集,可以写入中文,但是varchar类型的还是乱码, 修改数据库字符集
alter database DBName collate Chinese_PRC_CI_AS
最后只能使用重建Master库来执行:
这里:
1,“C:\SQLServer2008R2\SQL2008R2”是指:SQL Server的安装源文件目录
3, SAPWD是重新创建Master库后sa的密码,Windows 2008 有密码策略,要使用强密码字符
执行完毕后,Master重建,用户,数据库会会消失,原来的库需要手工附加一下。
需求
安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”。
方法
重新生成系统数据库 ,然后还原配置信息。
局限
重新生成 master、model、msdb 和 tempdb 系统数据库时,将删除这些数据库,然后在其原位置重新创建。 如果在重新生成语句中指定了新排序规则,则将使用该排序规则设置创建系统数据库。 用户对这些数据库所做的所有修改都会丢失。 例如,您在 master 数据库中的用户定义对象、在 msdb 中的预定作业或在 model 数据库中对默认数据库设置的更改都会丢失。
前期准备
在重新生成系统数据库之前执行下列任务,以确保可以将系统数据库还原至它们的当前设置。
重新生成系统数据库
运行下面的命令就可重建数据库(根据您的系统,需要做相应的修改 ;D:/Setup 是数据库安装文件所在的路径)
D:/Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrators /SAPWD=XXXX /SQLCOLLATION=Chinese_PRC_CI_AS
参数说明:
参数名称
说明
/QUIET 或 /Q
指定在没有任何用户界面的情况下运行安装程序。
/ACTION=REBUILDDATABASE
指定安装程序将重新创建系统数据库。
/INSTANCENAME=InstanceName
SQL Server 实例的名称。 对于默认实例,请输入 MSSQLSERVER。
/SQLSYSADMINACCOUNTS=accounts
指定要添加到 sysadmin 固定服务器角色中的 Windows 组或单个帐户。 指定多个帐户时,请用空格将帐户隔开。 例如,请输入 BUILTIN\Administrators MyDomain\MyUser。 当您在帐户名称内指定包含空格的帐户时,用双引号将该帐户引起来。 例如,输入 NT AUTHORITY\SYSTEM。
[ /SAPWD=StrongPassword ]
指定 SQL Server sa 帐户的密码。 如果实例使用混合身份验证(SQL Server 和 Windows 身份验证)模式,则此参数是必需的。
安全说明
sa 帐户是一个广为人知的 SQL Server 帐户,并且经常成为恶意用户的攻击目标。 因此,为 sa 登录名使用强密码非常重要。
不要为 Windows 身份验证模式指定此参数。
[ /SQLCOLLATION=CollationName ]
指定新服务器级排序规则。 此参数可选。 如果没有指定,则使用服务器的当前排序规则。
重要提示
更改服务器级排序规则不会更改现有用户数据库的排序规则。 默认情况下,所有新创建的用户数据库都将使用新排序规则。
检查和修复
系统数据库恢复完成后,先检查一下字符集是否按要求恢复了:
字符集更改完成后,我们还需要附加上用户数据库,将原来的帐号和JOB等信息以及配置信息做修复,还需要修复孤立帐号等。
附加说明
如果您只需要更改某个用户数据库的字符集,非常简单:
--修改数据库字符集
alter database DBName collate Chinese_PRC_CI_AS
注意
以上恢复是在SQLServer2008R2版本上面完成的,不同的版本您可能需要做一些修改,另外此方法存在一定的风险(主要是在重建数据库阶段),产品环境