SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【MySQL】日本語を使わないで日本語の検索をする

問題

日本語を含むSQLを実行したいんだけど、できない!

mysql-nihongo-problem

答え

MySQLだと、HEX関数、CHAR関数を使ったこんな手がある。

EUC-JPで「内藤さん」を探したいとき。

1、どこか日本語が通じるところで下ごしらえ

select hex('内藤');
→ C6E2C6A3

「内藤」のujisでの16進表現が確認できた。

下ごしらえはphpでやってもよい。

//EUC-JPのソースで
var_dump(unpack('H*', '内藤'));
//→ c6e2c6a3

2、問題の環境でSQL実行

16進表現を元の文字列に戻したり(0xつける)

select * from dtb_customer where name01 = char(0xC6E2C6A3);

16進表現と16進表現で比較したり

select * from dtb_customer where hex(name01) like 'C6E2C6A3%';

utf8のHEX(‘内藤’)は E58685E897A4。sjisのHEX(‘内藤’)は 93E093A1。

ssh端末でShift_JISを送れないときなどにも使える。

関連するメモ

コメント