4

我正在使用西班牙语数据库,所以当我在寻找“aeiou”时,我还可以在这样的 where 子句中获得“áéíóú”或“AEIOU”或“ÁÉÍÓÚ”:

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 

我得到所有结果都OK,所以我的问题是,为什么如果我的数据库是 COLLATE Modern_Spanish_CI_AI 我必须为我的查询设置相同的排序规则???

我正在使用 SQL-Server 2008

4

2 回答 2

10

您可以使用COLLATE,例如。

SELECT * 
FROM TableName
WHERE strData COLLATE Latin1_general_CI_AI = 'perez' COLLATE Latin1_general_CI_AI

双方必须具有相同的排序规则。

其他:

于 2013-05-21T00:46:38.473 回答
4

您需要更改表 COLUMN 本身的排序规则。

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-21T00:43:46.633 回答