【MySQL】SQL内で文字列を16進表現する
問題
こんなとき
- データが文字化けしていて、うまくwhere句で抽出できない。
- クライアント側の事情でマルチバイト文字を含むSQLが思ったように発行できない。
- BLOB型カラムに入っているバイナリにマッチさせたい。
- バイナリを登録したい。
答え
MySQLだと「0x~~」形式で、文字列の16進表現が使える。
SELECT * FROM T WHERE name = 0xEFBCB3EFBCB4303030343030; /* 'ST000400'(全角含む) */
SELECT * FROM T WHERE name = 0xE38182E38184E38186E38188E3818A; /* 'あいうえお' */
SELECT * FROM T WHERE name = 0x82A082A282A482A682A8; /* sjisの'あいうえお' */
UPDATE T SET name = 0x82A082A282A482A682A8 WHERE id = 123;
文字列の16進表現を作るには
SQLを使うと
SELECT HEX('あいうえお');
SELECT HEX(CONVERT('あいうえお' using sjis));
JavaScriptで作ると
'あいうえお'.split('').map(function(c){return c.charCodeAt(0).toString(16)}).join('')
コメント