我使用的是西班牙语数据库,所以当我在寻找和"aeiou“时,我也可以在where子句中得到"áéíóú”或"AEIOU“或”áéthis“,例如:
SELECT * FROM myTable WHERE stringData like '%perez%'我的花费是:
* perez
* PEREZ
* Pérez
* PÉREZ因此,我将数据库更改为排序规则: Modern_Spanish_CI_AI
我得到的只有:
* perez
* PEREZ但如果我这么做了:
SELECT * FROM myTable WHERE stringData like '%perez%' COLLATE Modern_Spanish_CI_AI 我得到了所有的结果,所以我的问题是,如果我的数据库是COLLATE Modern_Spanish_CI_AI,为什么我必须为我的查询设置相同的排序规则?
我使用的是SQL-Server 2008
发布于 2013-05-21 08:43:47
您需要更改表列本身的排序规则。
select collation_name, *
from sys.columns
where object_id = object_id('tblname')
and name = 'stringdata';如果你幸运的话,它就像(示例)一样简单。
alter table tblname alter column stringdata varchar(20) collate Modern_Spanish_CI_AS但是如果你有约束和/或模式绑定引用,事情就会变得很复杂。
使用具有混合排序规则的数据库可能非常困难,因此您可能需要重新排序所有表列。
发布于 2013-05-21 08:46:38
你可以用COLLATE,例如。
SELECT *
FROM TableName
WHERE strData COLLATE Latin1_general_CI_AI = 'perez' COLLATE Latin1_general_CI_AI两端必须具有相同的排序规则。
其他:
https://stackoverflow.com/questions/16660346
复制相似问题