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

 

当然,还有另外的解决办法,但是需要在查询栏位上下功夫,且每个要查询的地方都要设置了,就是这只collate

 

SELECT      *      FROM     dbo.test_table
WHERE     remark COLLATE Latin1_General_CI_AI   LIKE   ' %e% '  

 

 

转载于:https://www.cnblogs.com/forward/archive/2008/09/23/1297115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值