2011年10月 4日

[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のドキュメントも読んでみたのですが、この挙動のヒントになるような
情報は見つけられていません。どなたかこの挙動の根拠をご存知でしたら
教えていただければ幸いです。


投稿者 xml-rpc : 2011年10月 4日 17:43
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106638
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。