MySQLのTEXT型データで大文字と小文字を区別できるようにするには

既に使用を開始しているシステムで、TEXT型で定義しているデータの大文字と小文字を区別しなければならなくなりました。その時に調べた内容のまとめです。

まず、非バイナリ文字列とバイナリ文字列の性質の比較です。

文字列の種類 文字列検索 大文字/小文字の区別
非バイナリ文字列 CHAR、VARCHAR、TEXT 比較オペランドの照合順序
を使用
なし
バイナリ文字列 BINARY、VARBINARY、BLOB オペランドのバイトの数値
を使用
あり

参照:B.5.5.1 文字列検索での大文字/小文字の区別

バイナリ文字列に区分されている型を使用していれば問題なかったのですが、既に使用を開始していたため、TEXT型のまま大文字と小文字を区別できるようにしました。

まず前提として、「exmtable01」という名前のテーブルがあるとします。

exmtable01のテーブル定義情報は以下のようになっています。

valueフィールドの型を「TEXT BINARY」に変更します。

そうすると、exmtable01のテーブル定義は以下のように変更されます。

以上の変更により、TEXT型でも大文字と小文字を区別することができるようになりました。

また、テーブルを作成する時に「TEXT BINARY」を指定すると同様の定義となります。

phpMyAdminを使用している場合は、変更したいフィールドを選択し属性を「binary」に指定すれば、同様の変更を行うことができます。