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

大文字と小文字を区別する SQL Server 2008 の一意の列

    一意性は一意性制約で強制できます。

    一意のインデックスで大文字と小文字が区別されるかどうかは、サーバー (またはテーブル) の照合によって定義されます .

    次のクエリを使用して、データベースの現在の照合順序を取得できます:

    SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
    

    次のようなものが得られるはずです:

    SQLCollation
    ————————————
    SQL_Latin1_General_CP1_CI_AS
    

    ここで、照合の最後の「CI_AS」は、CI =大文字と小文字を区別しない、AS =アクセントを区別する、という意味です。

    これは、必要に応じて変更できます。データベースやテーブルに大文字と小文字が区別される照合がある場合、インデックスの一意性も大文字と小文字が区別されると予想されます。あなたのabcdefABCDEF 両方とも一意の文字列として受け入れられる必要があります。

    マーク

    更新:

    私はちょうどこれを試しました (SQL Server 2008 Developer Edition x64) - 私にとってはうまくいきます (私のデータベースは通常 "Latin1_General_CI_AS 照合順序を使用していますが、テーブルごと / VARCHAR 列ごとに別のものを定義することもできます):

    CREATE TABLE TestUnique
        (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)
    
    CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)
    
    INSERT INTO dbo.TestUnique(string) VALUES ('abc')
    INSERT INTO dbo.TestUnique(string) VALUES ('ABC')
    
    SELECT * FROM dbo.TestUnique
    

    そして戻ってきます:

    string
    ABC
    abc
    

    違反している一意のインデックスに関するエラーはありません。



    1. Mysqlは、トラフィックの多いデータベースでフィルターを使用して行をカウントします

    2. Oracle-読み取り専用ユーザーを作成する方法

    3. python pipinstallpsycopg2インストールエラー

    4. EloquentのフィールドごとのMySQLの順序