2011-06-23 9 views
44

SQLテーブルに単語のリストを設定しようとしています。それはかなり単純なテーブル自体:SQL固有のvarchar大文字小文字の区別の質問

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

私はに実行している問題は、このです:私は、「(第2のインサートが制約違反で失敗し

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

を背中合わせに、次の挿入を行うときキー 'WORD'の重複エントリ 'seth')。

WORDUNIQUE制約で大文字と小文字を区別するにはどうすればよいですか?

答えて

72

MySQLはcase insensitive by defaultであるように見える:

おそらく、大文字と小文字が区別照合(例えばutf8_cs)でカラムを作成する必要があります。デフォルトのMySQLことで

CREATE TABLE WORDS (
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_cs NOT NULL UNIQUE, 
    PRIMARY KEY(ID) 
); 
+26

それはそれをしました。ありがとう。この質問を後で見つけた人は、mysqlに 'utf8_cs'がないため 'utf8_bin'照合を使用しなければなりませんでした。 – Seth

+0

おかげさまで@Seth、Billの情報とともに役に立つutf8_binが私の状況にも適用されました – groovenectar

+1

#1273 - 不明な照合: 'utf8_cs' –

6

varcharに大文字小文字の違いと末尾のスペースを無視します。

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

show create tableを使用すると、MySQLがこれを完全表記に変換する方法をよりよく理解できます。

末尾のスペースや大文字と小文字を区別する必要がある場合は、varcharの代わりにvarbinaryを使用してください。

2

私は同じ問題を抱えていると私はそれを修正:

CREATE TABLE WORDS(
    ID BIGINT AUTO_INCREMENT, 
    WORD VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
    PRIMARY KEY(ID) 
); 
1

私は私のUNIQUEキーVARCHAR(1000)を作りました。出来た。

いくつか試行錯誤した結果、1100以上のものが見つかりました。varcharは失敗します。私は1099

に1001年の間しようとしなかった明確にする

は、この情報がお役に立てば幸いです。

関連する問題