今天安装公司的某个系统杯具了,错误是数据库的Collation不匹配。折腾了一阵,得到如下的解决方法和资料。
什么是数据库的Collation
指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。
SQL语句里面的COLLATE主要用于对字符进行排序,经常出现在表的创建语句中:
CREATE TABLE tt
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[FTUID] [varchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
表示输入记录是,FTUID按照Chinese_PRC_CI_AS 格式进行排序。
修改数据库的Collation
打开分析查询器,数据库选择master
ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE
–WITH ROLLBACK IMMEDIATE 执行这个命令之后,SQL Server立即断开所有的连接并回退它们的事务。所有正在执行事务的用户都会接收到一个连接错误,而且他们不能再连接数据库。
GO
alter database database_name COLLATE Latin1_General_100_CI_AI_KS;
GO
ALTER DATABASE database_name SET MULTI_USER
修改数据库默认的Collation
很遗憾,除非在安装时选好了Collation,否则要修改非常麻烦。步骤如下:
如果是SQL Server 2000,请使用位于%ProgramFiles%Microsoft SQL Server80ToolsBinn 目录中的RebuildM.exe 这个工具程式修改master 系统资料库的定序。
如果是SQL Server 2005 / 2008,则因为RebuildM.exe 工具程式已经停用,所以其修改定序的步骤较为复杂:
1. 确认已有重建使用者资料库与所有内含物件所需之所有资讯与指令码
2. 使用大量複製这类工具(例如:bcp.exe、SSIS 工具程式)来汇出所有资料库中之相关资料
3. 卸除所有的使用者资料库
4. 使用安装光碟中的setup.exe,搭配SQLCOLLATION 参数来重建master 系统资料库,并指定新的定序,如下所示即是一例:
start /wait <安装光碟之路径>setup.exe /qb INSTANCENAME=MSSQLSERVERREINSTALL=SQL_Engine REBUILDDATABASE=1 ADMINPASSWORD=<具备sysadmin 伺服器角色的使用者之密码>SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS
5. 备份master、model、与msdb 这几个系统资料库
6. 套用Service Pack 与hotfix
7. 再次备份master、model、与msdb 这几个系统资料库
8. 根据步骤1. 之资讯与指令码,建立所有使用者资料库以及所有内含物件
9. 汇入步骤2. 所汇出之所有资料
参考资料: