【MySQL】日本語を使わないで日本語の検索をする
問題
日本語を含むSQLを実行したいんだけど、できない!
- ssh端末で日本語が入力できない。
- 日本語が化ける。
- 文字コードが合わなくて通じない(ソースはUTF-8、データベースはEUC)。
答え
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を送れないときなどにも使える。
コメント