web-dev-qa-db-ja.com

SQL Serverが大文字と小文字を区別する

私はこのデータベースを持っています:

abcDEF

ABCdef

abcdef

私が書いた場合:select * from MyTbl where A='ABCdef'

入手方法:ABCdef

と取得方法:

abcDEF

    ABCdef

    abcdef

前もって感謝します

書くのを忘れた-sqlCE

19
Gold

COLLATE キーワードを使用して、クエリで大文字と小文字を区別することができます。

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'
32
RedFilter

データベースにabcDEF、ABCdef、abcdefが既に存在する場合は、大文字と小文字が区別されるか、制約がありません。

インデックスの使用を無効にする本当に大文字と小文字を区別する(大文字と小文字を区別しないデータベースの場合)には、両側にCOLLATEを追加する必要があります。

SELECT TheColumn
FROM MyTable 
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS

アクセントもどうですか? Latin1_General_CS_AILatin1_General_Bin

6
gbn

それは照合に関するすべてです。それぞれにサフィックスがあります(CIおよびCS、大文字と小文字を区別せず、大文字と小文字を区別します)。

http://www.databasejournal.com/features/mssql/article.php/10894_3302341_2/SQL-Server-and-Collat​​ion.htm

1
AlexanderMP

SQLではデフォルトで大文字と小文字が区別されないため、単純な文字列比較を行うと3つの項目すべてが取得されます。大文字と小文字を区別するには、フィールドの値と検索値をvarbinaryとしてキャストします。

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))

上記では、varcharフィールドのサイズが20であると想定しています。nvarcharの場合は、2倍にします(@ ps2goatに感謝します)。

1
Josh Anderson

whereの後にバイナリキーワードを追加するだけです。

select * from MyTbl where binary A = 'ABCdef';
1