修改SQLServer排序规则,特殊中文字符

碰到特殊中文在SQLServer 中可以保存但是无法搜索的问题,经多方请教发现是数据库排序规则的问题。排序规则请自行百度、Google等等。

一般情况下安装时的默认排序规则时Chinese_PRC_CI_AS,对特殊的中文字符不支持。需要把排序规则改为Chinese_PRC_BIN。

修改步骤:

1.如果有表值函数,需要删除表值函数(注意备份以还原)。否则会报排序规则依赖错误。

2.将数据库限制访问属性修改为single_user.

3.执行以下SQL语句,即可执行成功。

ALTER DATABASE databasename COLLATE Chinese_PRC_BIN

4.修改表列的排序规则。哭。。。。

alter table TableName alter column ColumnName nvarchar(200) collate Chinese_PRC_BIN

 

举个栗子:

create table test1
(
name nvarchar(100),
name1 varchar(100)
)
insert into test1 values(N'䓛',N'䓛')
insert into test1 values(N'哈哈',N'哈哈哈')
select * from test1 where name like N'%䓛%'

修改排序规则前,使用查询语句会查出全集,不带N,是空集。

修改排序规则后,可以正确查出结果。

特别注意:

1.字段一定要使用nvarchar,保存时需要带N,否则乱码。

2.对应的,查询时也要带N,否则查询得到的是空集。

坑坑坑:

由于该排序规则时区分大小写,在修改以后,查询表名称、字段名称都必须严格和数据库中表名称、字段名称一模一样,否则报错查询不到。应用程序难免会有不一样的,要改。

流泪建议:

如果不是万不得已,千万不要改,否则应用程序代码改起来没完,┭┮﹏┭┮

 

建议只对部分表的部分字段进行修改,可以完美避开上诉 坑 

参考:https://blog.csdn.net/ares1986/article/details/5793284

           https://www.cnblogs.com/kerrycode/archive/2013/12/07/3463208.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值