web-dev-qa-db-ja.com

SQL固有のvarchar大文字と小文字の区別の質問

SQLテーブルに単語のリストを入力しようとしています。テーブル自体は非常にシンプルです:

CREATE TABLE WORDS(
  ID BIGINT AUTO_INCREMENT, 
  Word VARCHAR(128) NOT NULL UNIQUE, 
  PRIMARY KEY(ID)
);

私が遭遇している問題はこれです:次の挿入を連続して行うとき

INSERT INTO WORDS(Word) VALUES('Seth');
INSERT INTO WORDS(Word) VALUES('seth');

2番目の挿入は、制約違反(「キー 'Word'の重複したエントリ 'seth'」)で失敗します。

大文字と小文字を区別するためにUNIQUEWord制約を取得するにはどうすればよいですか?

54
Seth

Mysqlは デフォルトでは大文字と小文字を区別しない

おそらく大文字と小文字を区別する照合順序で列を作成する必要があります(例:utf8_bin):

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    Word VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID)
);
86
Bill Brasky

デフォルトでは、MySQLはvarcharの大文字小文字と末尾のスペースの違いを無視します。

大文字と小文字を区別する必要がある場合は、テーブルをvarchar(...) binaryに変更できます。

つかいます show create table MySQLがこれを完全な表記に変換する方法をよりよく理解するため。

大文字と小文字を区別するだけでなく、末尾のスペースに注意する必要がある場合は、varbinaryの代わりにvarcharを使用します。

7
Bryan Field

UNIQUEキーvarchar(1000)を作成しました。出来た。

試行錯誤を繰り返した結果、1100 varchar以上の値が失敗することがわかりました。

明確にするために、私は1001から1099の間は試しませんでした。

お役に立てれば。

0
suleman