MySQLの文字列検索です。

半角カタカナの"ロ"がなぜか"_u"にヒットしてしまいます。
文字コードは Japanese(euc)、mySQLのバージョンは3.23.58。
select "ロ" like "_u"
が1になるのが確認できます。

どういうメカニズムでこういう現象が起こるのでしょうか?(EUCはじめ、UTF-7,8,16,SJIS,JIS、どの文字コードで解釈してもヒットしないはず)
また、解決法(ヒットしなくなる方法)は?

回答の条件
  • 1人2回まで
  • 登録:2006/12/12 15:39:55
  • 終了:2006/12/13 14:16:11

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/12/12 15:49:51

ポイント35pt

試していないけど、これが関係あるんじゃ無いでしょうか?

http://www.physalis.net/ss/space/blog/5

id:Sampo

BINARYをつけたところ、確かにヒットしなくなりました。

ケース統一のアルゴリズムに何か問題があるんでしょうかね?

ただ、できればケース非依存で文字列検索をしたいと思っています。

BINARYは指定しないような解決法を引き続き募集します。

2006/12/12 15:56:25
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/12/12 16:07:31

ポイント35pt

SQL で指定しないだけなら、

http://dev.mysql.com/doc/refman/4.1/ja/create-table.html

CREATE TABLE 時に varchar(255) BINARY と指定しておくことで設定できると思います。

すでに作成しているカラムについては ALTER TABLE で変更します。


カラムにも指定したくなければ MySQL のバージョンをあげるしかないような気がします。

id:Sampo

> MySQL のバージョンをあげる

やはりこれしかありませんか。

2006/12/12 16:18:11
  • id:b-wind
    MySQL4.0以下ではそもそも日本語は日本語として扱われず、単なるバイナリ列と同程度の扱いです。
    sjis/ujis に関してはエスケープ等の処理をせずともエラーにはならないようになっていますがそれ以上の処理はしません。

    CASE の問題はここから日本語の文字列であっても a-zA-Z に一致するバイト列があれば強制的に変換してしまうところから発生します。
    MySQL 全体で CASE を同一視しない設定があればよいのですが、マニュアルを見る限り見当たりません。

    結果多言語に正式対応した MySQL 4.1 以上で無いと完全な対処は出来ないことになります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません