MySQL

2014-01-08, mysql

大文字と小文字の区別

データベースやテーブルを作る時に、日本人なら文字コードはよく気にかけると思いますが、実は他にも気にするべきことが色々あるんですね…。今回ハマったのが以下の現象です。列の値の大文字と小文字が区別されていません。このテーブルのv列の値でDISTINCTをとると、以下の3つは「foo」1つにまとめられてしまいます。

mysql> SELECT * FROM t WHERE v = 'foo';
+------+
| v |
+------+
| foo |
| Foo |
| foO |
+------+

無視してくれた方が便利なことも多いんですが、知らずに使っていると不具合の原因になることもありそうです。以下のようにキャラクタセットを指定するとcollation(照合方法)が「utf8_general_ci」されますが、このciがCase Insensitive(大文字小文字を区別しない)という指定になっているようです。

CREATE DATABASE d DEFAULT CHARACTER SET utf8;

参考URLを読むと、どうやら列の使用目的に応じて、それぞれキャラクタセットを明示することが、データサイズや検索性の観点から望ましいようです。

参考URL

この記事は役に立ちましたか?