当我使用LIKE运算符时,SQL-Server忽略了我的COLLATION

San*_*ago 4 sql-server collation sql-server-2008 sql-like

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

SELECT * FROM myTable WHERE stringData like '%perez%'
Run Code Online (Sandbox Code Playgroud)

我支出:

* perez
* PEREZ
* Pérez
* PÉREZ
Run Code Online (Sandbox Code Playgroud)

所以我将数据库更改为排序规则:Modern_Spanish_CI_AI

我只得到:

* perez
* PEREZ
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

SELECT * FROM myTable WHERE stringData like '%perez%' COLLATE Modern_Spanish_CI_AI 
Run Code Online (Sandbox Code Playgroud)

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

我正在使用SQL-Server 2008

Joh*_*Woo 10

你可以使用COLLATE,例如.

SELECT * 
FROM TableName
WHERE strData COLLATE Latin1_general_CI_AI = 'perez' COLLATE Latin1_general_CI_AI
Run Code Online (Sandbox Code Playgroud)

双方必须有相同的整理.

其他:


Ric*_*iwi 4

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

select collation_name, *
from sys.columns
where object_id = object_id('tblname')
  and name = 'stringdata';
Run Code Online (Sandbox Code Playgroud)

如果你幸运的话,就像(示例)一样简单

alter table tblname alter column stringdata varchar(20) collate Modern_Spanish_CI_AS
Run Code Online (Sandbox Code Playgroud)

但如果您有约束和/或架构绑定引用,它可能会变得复杂。
使用具有混合排序规则的数据库可能非常困难,因此您可能需要重新排序所有表列。