sql >> データベース >  >> RDS >> Sqlserver

ß !=ss である nvarchar 型の大文字と小文字を区別しない主キー

    ああ、でもそれは ありますので可能です これを自然に処理する照合順序 (実際にはいくつかありますが、すべて同じ「ファミリー」にあります):Hungarian_Technical_* (まあ、CaseSensitive (CS) と Binary (BIN / BIN2) のバリエーションを除く)。もちろん、これが PK として適切な選択であるかどうかはまだわかりませんが、UNIQUE INDEX にできない理由はありません。 .

    SELECT tmp.*,
           IIF(tmp.[First] = tmp.[Second] COLLATE Hungarian_Technical_CI_AI,
               N'Equal',
               N'NOT EQUAL') AS [Result]
    FROM (
          SELECT N'weiß', N'Weiß', N'Equal'
          UNION ALL
          SELECT N'weiss', N'Weiss', N'Equal'
          UNION ALL
          SELECT N'weiß', N'weiss', N'NOT Equal'
          UNION ALL
          SELECT N'Weiß', N'Weiss', N'NOT Equal'
          UNION ALL
          SELECT N'weiß', N'Weiss', N'NOT Equal'
          ) tmp ([First], [Second], [Ideal]);
    

    結果:

    First   Second  Ideal       Result
    weiß    Weiß    Equal       Equal
    weiss   Weiss   Equal       Equal
    weiß    weiss   NOT Equal   NOT EQUAL
    Weiß    Weiss   NOT Equal   NOT EQUAL
    weiß    Weiss   NOT Equal   NOT EQUAL
    

    この方法で機能する合計 24 の照合順序があります。次の方法で見つけることができます:

    SELECT hc.*
    FROM sys.fn_HelpCollations() hc
    WHERE hc.name LIKE N'Hungarian[_]Technical%'
    AND hc.name LIKE N'%[_]CI%'
    ORDER BY hc.name;
    

    それらは:

    バージョン 100 の場合 照合が利用可能である (つまり、SQL Server 2008 以降を使用している) 場合は、名前にバージョン番号のない照合ではなく、それらを使用してください。

    編集:
    "Hungarian Technical" 照合について、興味深いと思われる追加情報を見つけました:

      <リ>

      MySQL:ハンガリー語照合 -- これは、照合を実装する方法の詳細を理解しようとしている一部の MySQL 開発者による listserv ディスカッションのアーカイブです。どうやら、いくつかの複雑な規則があり、少なくとも部分的には、ソートのために複数の文字を 1 つの文字に等しくする必要があるためです (セクション「3. 特別な digraph/trigraph ルール」を参照してください)。これはかもしれない 予期しない動作を引き起こします。特定の文字の組み合わせはそのセクションに記載されているため、少なくとも、この照合を使用して並べ替えルールが無効になるかどうかを判断するのに役立つテスト ケースを設定しやすくなります。

      <リ>

      ハンガリー語の照合順序が非常に多いのはなぜですか? -- これは、興味深い情報が含まれている social.msdn に関するディスカッションです。 Erland Sommarsko によるコメントがあり、次のように述べています。

      複雑なルールに関する MySQL 開発者の議論を考えると、これらのテスト結果はそれほど驚くべきものではないようです。

    したがって、これらの項目の両方を考慮して、単に NVARCHAR フィールドをこれらのハンガリーの技術照合順序のいずれかに設定するか、@GarethD の推奨する計算列を使用するかを決定する必要があります。

    文字列と照合の詳細については、照合情報 をご覧ください。



    1. PostgreSQL-2列から複合最大値を持つ行を選択します

    2. mysqlLIKEクエリに時間がかかりすぎる

    3. Oracle:ToadでSERVEROUTPUTをオンに設定

    4. データベースを削除する方法