---------------数据库排序规则修改------------------------------

时间:2021-08-15 06:56:47
我恢复了个数据库备份文件SQLBak在我的数据库中
当我执行
USE SQLBak
SELECT '合计'    --出来的是“合?”
但是当我
USE master
SELECT '合计'    --出来的是“合计”

上网查了一下貌似是排序规则的问题
前者Chinese_*_Stroke_CI_AS,后者Chinese_PRC_CI_AS

我想把恢复的那个的排序也改成Chinese_PRC_CI_AS,但是找不到好的办法,所以来请教大家了。
也不知道是不是排序这个原因,我主要是想解决乱码这个问题,谢谢大家了,新年快乐!

16 个解决方案

#1


http://msdn.microsoft.com/en-us/library/ms174269.aspx

alter database database name
 collate collation_name

#2


这个应该有关系,因为这个不单单是排序规则,还设计到编码问题

ALTER DATABASE [SQLBak] COLLATE Chinese_PRC_CI_AS

#3


引用 2 楼 szm341 的回复:
这个应该有关系,因为这个不单单是排序规则,还设计到编码问题

ALTER DATABASE [SQLBak] COLLATE Chinese_PRC_CI_AS


引用 1 楼 mayuanf 的回复:
http://msdn.microsoft.com/en-us/library/ms174269.aspx
SQL code?12alter database database name collate collation_name

这个我也试过了
alter database SQLBak collate Chinese_PRC_CI_AS
结果是,在2008里面:无法用排它锁锁定该数据库,以执行该操作。更改失败...
2005里面是:对象'fnSplitTbl' 依赖于 数据库排序规则。还有这两个也依赖fnSplit,fnSplitTable

#4


alter collation后已有的对象还是保持原来的collation.
可以参考一下步骤
1.script出该数据库里所有对象
2.drop掉该数据库里所有对象
3.alter database 指定新的collation
4.重新创建所有对象

#5


你要修改数据库的排序规则的话,要先删除索引,修改字段的排序规则,然后修改数据库的排序规则,最后把索引加上去

#6


你还是新建一个数据库将原来数据库的脚本倒出来在新数据库创建,之后将源数据导入。这样肯定不会有问题。 

因为即使你修改了数据库的排序规则,表的排序规则还是没改的。

#7


来人哪 ---------------数据库排序规则修改------------------------------

#8


---------------数据库排序规则修改------------------------------

#9


---------------数据库排序规则修改------------------------------新建数据库,然后导脚本再导数据。
一旦有了依赖,改排序规则将会非常麻烦,我搞过,几天都没搞好。另外,排序规则分实例级别、数据库级别、列级别和语句级别,单纯alter database不能保证完全没问题。所以最好还是新建。如果是SQLServer2012,还有一个新功能【部分数据库】,听说可以解决多语言共存的问题。

#10


try this,

 USE SQLBak
 SELECT N'合计'

#11


引用 10 楼 ap0405140 的回复:
try this,
SQL code?12 USE SQLBak SELECT N'合计'

这个好,什么意思?

#12


以Unicode字符串显示,其实数据本身没有乱码.

#13


引用 12 楼 ap0405140 的回复:
以Unicode字符串显示,其实数据本身没有乱码.

那怎么搞成正常的?

#14


---------------数据库排序规则修改------------------------------

#15


已经存入数据库中的数据就算后面改成Unicode也还是乱码,只能重新录入

#16


学习了! ---------------数据库排序规则修改------------------------------

#1


http://msdn.microsoft.com/en-us/library/ms174269.aspx

alter database database name
 collate collation_name

#2


这个应该有关系,因为这个不单单是排序规则,还设计到编码问题

ALTER DATABASE [SQLBak] COLLATE Chinese_PRC_CI_AS

#3


引用 2 楼 szm341 的回复:
这个应该有关系,因为这个不单单是排序规则,还设计到编码问题

ALTER DATABASE [SQLBak] COLLATE Chinese_PRC_CI_AS


引用 1 楼 mayuanf 的回复:
http://msdn.microsoft.com/en-us/library/ms174269.aspx
SQL code?12alter database database name collate collation_name

这个我也试过了
alter database SQLBak collate Chinese_PRC_CI_AS
结果是,在2008里面:无法用排它锁锁定该数据库,以执行该操作。更改失败...
2005里面是:对象'fnSplitTbl' 依赖于 数据库排序规则。还有这两个也依赖fnSplit,fnSplitTable

#4


alter collation后已有的对象还是保持原来的collation.
可以参考一下步骤
1.script出该数据库里所有对象
2.drop掉该数据库里所有对象
3.alter database 指定新的collation
4.重新创建所有对象

#5


你要修改数据库的排序规则的话,要先删除索引,修改字段的排序规则,然后修改数据库的排序规则,最后把索引加上去

#6


你还是新建一个数据库将原来数据库的脚本倒出来在新数据库创建,之后将源数据导入。这样肯定不会有问题。 

因为即使你修改了数据库的排序规则,表的排序规则还是没改的。

#7


来人哪 ---------------数据库排序规则修改------------------------------

#8


---------------数据库排序规则修改------------------------------

#9


---------------数据库排序规则修改------------------------------新建数据库,然后导脚本再导数据。
一旦有了依赖,改排序规则将会非常麻烦,我搞过,几天都没搞好。另外,排序规则分实例级别、数据库级别、列级别和语句级别,单纯alter database不能保证完全没问题。所以最好还是新建。如果是SQLServer2012,还有一个新功能【部分数据库】,听说可以解决多语言共存的问题。

#10


try this,

 USE SQLBak
 SELECT N'合计'

#11


引用 10 楼 ap0405140 的回复:
try this,
SQL code?12 USE SQLBak SELECT N'合计'

这个好,什么意思?

#12


以Unicode字符串显示,其实数据本身没有乱码.

#13


引用 12 楼 ap0405140 的回复:
以Unicode字符串显示,其实数据本身没有乱码.

那怎么搞成正常的?

#14


---------------数据库排序规则修改------------------------------

#15


已经存入数据库中的数据就算后面改成Unicode也还是乱码,只能重新录入

#16


学习了! ---------------数据库排序规则修改------------------------------