mysql:15636
From: 亀田義裕 <亀田義裕 <kameda.sbng@xxxxxxxxxx>>
Date: Tue, 4 Oct 2011 17:43:06 +0900
Subject: [mysql 15636] collationについて質問
亀田と申します。 collationについて、想定と違う動作に遭遇しました。どなたか動作の理由を ご存知であれば、教えていただけないでしょうか? ■ 概要 レコードに濁点付きの半角カタカナの文字列が格納されている。 charset=utf8, collate=utf8_unicode_ci collateがutf8_unicode_ciであれば、全角ひらがな、全角カタカナ、 半角カタカナ を同一の値として扱うと想定していたが、格納されている 文字列を全角カタカナ、全角ひらがなに変換した値でlike検索を かけてもマッチしない。 * ただし、値に濁点が含まれていないケースだとマッチする * like検索ではなく、 = を用いて検索すると、マッチする 以下シェルの履歴です。全角カタカナでlike検索をかけたときのみ マッチしていません。 ================================= mysql> status; -------------- mysql Ver 14.14 Distrib 5.1.53, for unknown-linux-gnu (x86_64) using readline 5.1 ... mysql> create table test (id integer auto_increment primary key, kana varchar(255)); Query OK, 0 rows affected (0.01 sec) mysql> show create table test; | Table | Create Table | | test | CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `kana` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | 1 row in set (0.00 sec) mysql> insert test set kana = 'ベネフィス'; Query OK, 1 row affected (0.00 sec) mysql> select count(*) from test where kana = 'ベネフィス'; +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test where kana like 'ベネフィス'; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test where kana = 'ベネフィス'; +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test where kana like 'ベネフィス'; +----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) ================================= 同じ事をmysql5.5で行なっても同じ結果だったので、バージョンによる 問題ではないと考えています。 mysqlのドキュメントも読んでみたのですが、この挙動のヒントになるような 情報は見つけられていません。どなたかこの挙動の根拠をご存知でしたら 教えていただければ幸いです。
-> 15636 2011-10-04 17:43 [亀田義裕 <kameda.sbn] collationについて質問 15637 2011-10-04 21:01 ┗[HIRATSUKA Sadao <hir] 15638 2011-10-06 14:51 ┗[亀田義裕 <kameda.sbn]