MySQL_データの大文字小文字の区別
あるテーブルで大文字・小文字の区別したいと要望がありました。同じ文字列で大文字・小文字のそれぞれデータのインサートを許容して欲しいそうです。
現状のテーブル構造
mysql> desc sites; +------------+----------------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+----------------------+------+-----+-------------------+-------+ | id | int(10) unsigned | NO | PRI | NULL | | | name | varchar(1000) | NO | | NULL | | | url | varchar(255) | NO | UNI | NULL | | | type | enum('recruit','ad') | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | | updated_at | timestamp | YES | | NULL | | +------------+----------------------+------+-----+-------------------+-------+ 6 rows in set (0.00 sec)
jpとJpの違いがるデータのインサート
mysql> INSERT INTO sites (id, name, url, type, created_at) VALUES (13, 'a01', 'http://www.goo.ne.jp', 'ad', now()); ERROR 1062 (23000): Duplicate entry 'http://www.goo.ne.jp' for key 'sites_url_unique' mysql> INSERT INTO sites (id, name, url, type, created_at) VALUES (13, 'a01', 'http://www.goo.ne.jP', 'ad', now()); ERROR 1062 (23000): Duplicate entry 'http://www.goo.ne.jP' for key 'sites_url_unique'
このままではインサートできませんでした。 該当フィールドにBINARY属性を付与します。
mysql> ALTER TABLE sites MODIFY url VARCHAR(255) BINARY; Query OK, 12 rows affected (0.21 sec) Records: 12 Duplicates: 0 Warnings: 0
Jpのデータをインサート
mysql> INSERT INTO sites (id, name, url, type, created_at) VALUES (13, 'a01', 'http://www.goo.ne.jP', 'ad', now());
jp、Jpの違いのあるデータが無事に入りました。
mysql> select * from sites; +----+--------------------------------+---------------------------------+---------+---------------------+---------------------+ | id | name | url | type | created_at | updated_at | +----+--------------------------------+---------------------------------+---------+---------------------+---------------------+ | ... | 12 | a01 | http://www.goo.ne.jp | ad | 2016-01-31 16:59:13 | NULL | | 13 | a01 | http://www.goo.ne.jP | ad | 2016-01-31 17:15:05 | NULL | +----+--------------------------------+---------------------------------+---------+---------------------+---------------------+ 13 rows in set (0.00 sec) mysql> select * from sites where url = 'http://www.goo.ne.jp'; +----+------+----------------------+------+---------------------+------------+ | id | name | url | type | created_at | updated_at | +----+------+----------------------+------+---------------------+------------+ | 12 | a01 | http://www.goo.ne.jp | ad | 2016-01-31 16:59:13 | NULL | +----+------+----------------------+------+---------------------+------------+ 1 row in set (0.00 sec) mysql> select * from sites where url = 'http://www.goo.ne.jP'; +----+------+----------------------+------+---------------------+------------+ | id | name | url | type | created_at | updated_at | +----+------+----------------------+------+---------------------+------------+ | 13 | a01 | http://www.goo.ne.jP | ad | 2016-01-31 17:15:05 | NULL | +----+------+----------------------+------+---------------------+------------+ 1 row in set (0.00 sec)