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 

私はすべての結果を正常に取得したので、私の質問は、データベースが 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 に答える