大文字と小文字の区別
データベースやテーブルを作る時に、日本人なら文字コードはよく気にかけると思いますが、実は他にも気にするべきことが色々あるんですね…。今回ハマったのが以下の現象です。列の値の大文字と小文字が区別されていません。このテーブルの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
この記事は役に立ちましたか?
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について