SqlServer数据库字符集,如何查询并更改数据库字符集(转载)
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 将认为相同字符的单字节表示法和双字节表示法等效。
所有回覆
C:\temp\SQLServer2005SP3-KB955706-x86-CHS.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=administrators /SAPWD=tagit /SQLCOLLATION=Japanese_CI_AS
今天同事的新安装的SQL Server 2008 R2 写入中文乱码,发现是排序代码的问题
--通过修改字符集,可以写入中文,但是varchar类型的还是乱码, 修改数据库字符集
alter database DBName collate Chinese_PRC_CI_AS
最后只能使用重建Master库来执行:
C:\SQLServer2008R2\SQL2008R2>setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrators /SAPWD=11 /SQLCOLLATION=Chinese_PRC_CI_AS |
这里:
1,“C:\SQLServer2008R2\SQL2008R2”是指:SQL Server的安装源文件目录
2,setup是指安装命令Setup.exe
3, SAPWD是重新创建Master库后sa的密码,Windows 2008 有密码策略,要使用强密码字符
执行完毕后,Master重建,用户,数据库会会消失,原来的库需要手工附加一下。
转载自http://www.cnblogs.com/fygh/archive/2012/05/15/2501598.html
需求
安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”。

方法
重新生成系统数据库 ,然后还原配置信息。
局限
重新生成 master、model、msdb 和 tempdb 系统数据库时,将删除这些数据库,然后在其原位置重新创建。 如果在重新生成语句中指定了新排序规则,则将使用该排序规则设置创建系统数据库。 用户对这些数据库所做的所有修改都会丢失。 例如,您在 master 数据库中的用户定义对象、在 msdb 中的预定作业或在 model 数据库中对默认数据库设置的更改都会丢失。
前期准备
在重新生成系统数据库之前执行下列任务,以确保可以将系统数据库还原至它们的当前设置。
- 记录所有服务器范围的配置值。
SELECT * FROM sys.configurations; - 记录所有应用到 SQL Server 实例和当前排序规则的 Service Pack 和修补程序。 重新生成系统数据库后必须重新应用这些更新。
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
SERVERPROPERTY('Collation') AS Collation;
- 记录系统数据库的所有数据文件和日志文件的当前位置。 重新生成系统数据库会将所有系统数据库安装到其原位置。 如果已将系统数据库数据文件或日志文件移动到其他位置,则必须再次移动这些文件。
SELECT name, physical_name AS current_file_location
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
- 如果将 SQL Server 的实例配置为复制分发服务器,请找到该分发数据库的当前备份。
- 确保您有重新生成系统数据库的相应权限。 必须是 sysadmin 固定服务器角色的成员才能执行此操作。 有关详细信息,请参阅服务器级别角色。
- 将原数据库的帐号、JOB等与系统数据库相关的信息全部备份起来(可以先生成相应的脚本),分离掉所有用户库。
重新生成系统数据库
运行下面的命令就可重建数据库(根据您的系统,需要做相应的修改 ;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 ] |
指定新服务器级排序规则。 此参数可选。 如果没有指定,则使用服务器的当前排序规则。 重要提示 更改服务器级排序规则不会更改现有用户数据库的排序规则。 默认情况下,所有新创建的用户数据库都将使用新排序规则。 有关详细信息,请参阅设置或更改服务器排序规则。 |
安装程序完成后,将显示如下信息,(你也可以检查 Summary.txt 日志文件以验证重新生成过程是否成功完成。 此文件位于 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs)。

检查和修复
系统数据库恢复完成后,先检查一下字符集是否按要求恢复了:

字符集更改完成后,我们还需要附加上用户数据库,将原来的帐号和JOB等信息以及配置信息做修复,还需要修复孤立帐号等。
附加说明
如果您只需要更改某个用户数据库的字符集,非常简单:
--修改数据库字符集
alter database DBName collate Chinese_PRC_CI_AS
注意
以上恢复是在SQLServer2008R2版本上面完成的,不同的版本您可能需要做一些修改,另外此方法存在一定的风险(主要是在重建数据库阶段),产品环境
最好还是重新安装数据库。


浙公网安备 33010602011771号