2

次のスクリプトを考えてみましょう。2 番目の INSERT ステートメントは主キー違反をスローします。

BEGIN TRAN

CREATE TABLE UnicodeQuestion
(
    UnicodeCol NVARCHAR(100)
    COLLATE Latin1_General_CI_AI
)

CREATE UNIQUE INDEX UX_UnicodeCol
ON UnicodeQuestion ( UnicodeCol )

INSERT INTO UnicodeQuestion (UnicodeCol) VALUES (N'ae')
INSERT INTO UnicodeQuestion (UnicodeCol) VALUES (N'æ')

ROLLBACK

私が理解しているように、インデックスにこれらの値を個別に処理させたい場合は、バイナリ照合を使用する必要があります。しかし、多くのバイナリ照合順序があり、それらの名前には個々の文化が含まれています! 文化に敏感な扱いはしたくない...

任意の Unicode データを nvarchar 列に格納する場合、どの照合順序を使用する必要がありますか?

4

1 に答える 1

1

Unicode データの場合、選択するバイナリ照合順序は関係ありません

Unicode データ型の場合、データ比較は Unicode コード ポイントに基づきます。Unicode データ型のバイナリ照合では、ロケールはデータの並べ替えで考慮されません。たとえば、Latin_1_General_BIN と Japanese_BIN を Unicode データで使用すると、同じ並べ替え結果が得られます。

ロケール固有の照合を持つ理由はBIN、非 Unicode データを処理するときに使用されるコード ページを決定するためです。

于 2013-10-23T09:23:23.923 に答える