既に使用を開始しているシステムで、TEXT型で定義しているデータの大文字と小文字を区別しなければならなくなりました。その時に調べた内容のまとめです。
まず、非バイナリ文字列とバイナリ文字列の性質の比較です。
文字列の種類 |
型 |
文字列検索 |
大文字/小文字の区別 |
非バイナリ文字列 |
CHAR、VARCHAR、TEXT |
比較オペランドの照合順序 を使用 |
なし |
バイナリ文字列 |
BINARY、VARBINARY、BLOB |
オペランドのバイトの数値 を使用 |
あり |
参照:B.5.5.1 文字列検索での大文字/小文字の区別
バイナリ文字列に区分されている型を使用していれば問題なかったのですが、既に使用を開始していたため、TEXT型のまま大文字と小文字を区別できるようにしました。
まず前提として、「exmtable01」という名前のテーブルがあるとします。
|
mysql> CREATE TABLE exmtable01 ( -> value TEXT -> ); |
exmtable01のテーブル定義情報は以下のようになっています。
|
mysql> SHOW CREATE TABLE exmtable01; +------------+-----------------------------------------------------------------------+ | Table | Create Table | +------------+-----------------------------------------------------------------------+ | exmtable01 | CREATE TABLE `exmtable01` ( `value` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +------------+-----------------------------------------------------------------------+ |
valueフィールドの型を「TEXT BINARY」に変更します。
|
mysql> ALTER TABLE exmtable01 MODIFY value TEXT BINARY; |
そうすると、exmtable01のテーブル定義は以下のように変更されます。
|
mysql> SHOW CREATE TABLE exmtable01; +------------+-----------------------------------------------------------------------+ | Table | Create Table | +------------+-----------------------------------------------------------------------+ | exmtable01 | CREATE TABLE `exmtable01` ( `value` text CHARACTER SET utf8 COLLATE utf8_bin ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +------------+-----------------------------------------------------------------------+ |
以上の変更により、TEXT型でも大文字と小文字を区別することができるようになりました。
また、テーブルを作成する時に「TEXT BINARY」を指定すると同様の定義となります。
|
mysql> CREATE TABLE exmtable02 ( -> value TEXT BINARY -> ); |
|
mysql> SHOW CREATE TABLE exmtable02; +------------+-----------------------------------------------------------------------+ | Table | Create Table | +------------+-----------------------------------------------------------------------+ | exmtable02 | CREATE TABLE `exmtable02` ( `value` text CHARACTER SET utf8 COLLATE utf8_bin ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +------------+-----------------------------------------------------------------------+ |
phpMyAdminを使用している場合は、変更したいフィールドを選択し属性を「binary」に指定すれば、同様の変更を行うことができます。