Accent-Insensitive, Accent Sensitive, a ã, e é 模糊查询
最近在弄一个欧洲老头的需求,说查询josé,但他输入的却是jose,开始以为SQL Server确实不应该给他查出来才对,但老头却要求要查出来,而且还说google都可以实现,如果不能实现,那就不给上线~~ 先BS下,然后自己回来研究这个,却发现很难入门,完全不知道关键字是啥~~
搜索了一个晚上+半个上午,才找到,原来就是SQL Server DB create的时候,选择字符集,Accent Sensitive 或者 Accent Insensitive,说到最后,就是不知道关键字,知道关键字,就都好办了,开始还想着encode, decode什么的~,哎
那现在来总结下更改已经创建好的database 的collate
Update 原有数据的step
1. 知道collationid更新后的是多少
2. 执行下面的代码
当run ALTER DATABASE BQEGSRNet10E9 COLLATE Chinese_PRC_CI_AI 可能会报错误出来
The database could not be exclusively locked to perform the operation ……
这时需要将该数据库改成单用户的,便可以正常run刚才的代码,原因应该是有约束存在
update db sql script
ALTER DATABASE BQEGSRNet10E9 COLLATE Chinese_PRC_CI_AI
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
GO
--
UPDATE syscolumns SET collationid=61476
----------------------------------^^^^这个id必须在帮助里查到和你想改的规则对应
WHERE collation='Chinese_PRC_CI_AS'
----------------^^^^^^^^^^^^^^^^^^这是旧的规则
and id in (SELECT id FROM sysobjects WHERE xtype='U')
GO
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
GO
--
UPDATE syscolumns SET collationid=61476
----------------------------------^^^^这个id必须在帮助里查到和你想改的规则对应
WHERE collation='Chinese_PRC_CI_AS'
----------------^^^^^^^^^^^^^^^^^^这是旧的规则
and id in (SELECT id FROM sysobjects WHERE xtype='U')
GO
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
GO
当然,还有另外的解决办法,但是需要在查询栏位上下功夫,且每个要查询的地方都要设置了,就是这只collate
SELECT * FROM dbo.test_table
WHERE remark COLLATE Latin1_General_CI_AI LIKE '%e%'
WHERE remark COLLATE Latin1_General_CI_AI LIKE '%e%'
forward.molly.宝儿 独自行走