mysql:7350
From: "HIROSE, Masaaki" <"HIROSE, Masaaki" <hirose31@xxxxxxxxxx>>
Date: Tue, 25 Mar 2003 04:38:45 +0900
Subject: [mysql 07350] Re: 漢字の部分一致検索の挙動について
ひろせといいます on "[mysql 07213] Re: 漢字の部分一致検索の挙動について" <20030318071646.3dfbfcba.tommy@xxxxxxxxxx> at Tue, 18 Mar 2003 07:16:46 +0900 とみたまさひろ <tommy@xxxxxxxxxx> wrote: > > どもです。先日“パ”と“ケ”が区別できないという問題を投稿しましたが、 > > 色々調べてみた結果、 > > > > ・LIKE '%ケンタ%'等の部分一致場合に発生する。 > > (SELECT結果「ケンタッキー」と「パンタロン」がマッチ) > > ・MySQLVer4系列でのみ発生する。 > > > > の様です。 > > 一日も早くこの現象が無くなることを祈って。。。 > > 原因がわかりました。MySQL 4.0.2 で導入された、 > > * Use `Turbo Boyer-Moore' algorithm to speed up `LIKE "%keyword%"' > searches. > > の影響のようです。"%string%" 形式の LIKE だけ特別な関数を呼んで処理す > るようになってました。その関数はマルチバイトを意識してません。 残念ながら先日リリースされた 4.0.12 でも直っていませんでした。テーブル 定義時に BINARY 属性をつけたりすれば回避できるのですが、そうすると文字 列関数がマルチバイトを意識しなくなるので頭が痛いです。 ところで、EXPLAIN で見る限りはテーブル定義時の BINARY 属性に比べ、 SELECT 時などの BINARY 関数の使用は効率が悪いようなので、原則、 文字種類 / 大・小文字 ========================================================= 英のみ / 区別しない → BINARY 属性なし、関数使用しない 英のみ / 区別する → BINARY 属性あり、関数使用しない 和のみ / 区別しない → BINARY 属性なし、関数使用しない 和のみ / 区別する → BINARY 属性なし、関数使用しない 英和混在 / 区別しない → BINARY 属性なし、関数使用しない 英和混在 / 区別する → BINARY 属性あり、関数使用しない # 要は ASCII 文字が含まれる場合は BINARY 属性をつける。 という方針で考えているのですが、これは妥当でしょうか? # 件の LIKE '%keyword%' 問題は別として。 ## 最後のケースは SUBSTRING 等の文字列関数の使用に注意が必要ですが。 -- ひろせ
7140 2003-03-06 18:29 [Kitajima <kitajima@x] 漢字の部分一致検索の挙動について 7149 2003-03-08 13:45 ┣[とみたまさひろ <tomm] 7150 2003-03-09 18:18 ┃┗[Kitajima <kitajima@x] 7151 2003-03-09 19:29 ┃ ┗[とみたまさひろ <tomm] 7159 2003-03-11 21:10 ┃ ┗[Takeyuki Miyagawa <m] 7160 2003-03-12 02:08 ┃ ┣[Tomoyuki Ishino <ish] 7161 2003-03-12 11:23 ┃ ┃┗[Kitajima <kitajima@x] 7163 2003-03-13 02:30 ┃ ┗[とみたまさひろ <tomm] @ 7213 2003-03-18 07:16 ┗[とみたまさひろ <tomm] 7218 2003-03-18 13:22 ┣[Kitajima <kitajima@x] -> 7350 2003-03-25 04:38 ┗["HIROSE, Masaaki" <h] 7361 2003-03-26 01:47 ┗[とみたまさひろ <tomm] 7371 2003-03-26 18:36 ┗["HIROSE, Masaaki" <h]