碰到特殊中文在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