0

一部の特殊な Unicode 文字のみが異なる主キーを持つレコードを挿入する際に問題があります。

たとえば、主キーが のレコードがすでにデータベースにあり、主キーが である"test"別のレコードを挿入しようとすると"test + '\u13A4' + '\u13B4' + '\u13B9'"、重複キー エラーが発生します。SQL Server 2012 で EF 5 を使用しています。

主キーは として定義されnvarchar、照合は に設定されSQL_Latin1_General_CP1_CI_ASます。特殊な Unicode 文字が含まれている場合は主キーをうまく検索できますが、Unicode の特殊文字によって異なる場合 (上記の例のように)、挿入時に重複キー エラーが発生します。この問題をどのように回避しますか?

4

2 に答える 2

1

SQL_Latin1_CP1 照合は、すべての Unicode コードポイントに対応しているわけではありません。

select N'test' collate SQL_Latin1_General_CP1_CI_AS
union
select N'test' + nchar(5028) + nchar(5044) + nchar(5049)
-- result: 1 row

SQL Server 2008 以降では新しいものを使用してください。

select N'test' collate Latin1_General_100_CI_AS
union
select N'test' + nchar(5028) + nchar(5044) + nchar(5049)
-- result: 2 rows

使用している Unicode 文字は 16 ビット文字の範囲内にあるため、補助文字はまだ機能しません。

于 2012-11-01T18:54:08.023 に答える
0

これは、文字列を連結する方法に関連している必要があります。以下は私にとってはうまくいきます:

    CREATE TABLE #UnicodeTest (
      UnicodePK NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS PRIMARY KEY 
    )

    INSERT #UnicodeTest
            ( UnicodePK )
    VALUES  ( N'test'
              )

    INSERT #UnicodeTest
            ( UnicodePK )
    VALUES  ( N'test\u13A4\u13B4\u13B9'
              )

    INSERT #UnicodeTest
            ( UnicodePK )
    VALUES  ( N'test + \u13A4 + \u13B4 + \u13B9'
              )

    INSERT #UnicodeTest
            ( UnicodePK )
    VALUES  ( N'test + ''\u13A4'' + ''\u13B4'' + ''\u13B9'''
              )


    SELECT * FROM #UnicodeTest

    DROP TABLE #UnicodeTest
于 2012-11-01T18:25:13.450 に答える