【MySQL】文字列をバイト数で切り取る

2019年1月10日木曜日

mysql データベース 関数

t f B! P L

文字列をバイト数で切り取る


MySQLで文字列から一部切り取るとき
LEFT/RIGHT/MID もしくは SUBSTRING を使いますが、
これらの関数は、切り取る単位がバイトではなく文字単位になるため、
バイトで切る取ることはでません。

CASTを使ってバイナリに変換してSUBSTRINGをすれば、
バイト数で切り取ることができますが、
日本語等のマルチバイト文字が含まれていると
マルチバイトの途中で切り取られるため、文字化けが発生します

mysql> select CAST(LEFT(CAST(name as BINARY), 10) as char(1000)) as name from animal;
+---------+
| name    |
+---------+
| 犬ドッ  笨
+---------+

こういう時は、CONVERT関数を使います。



CONVERT関数でBINARYからCHARに変換

CASTで変換するのではなく、CONVERTで、
BINARY型からCHAR型に変換させます。

mysql> select CONVERT(LEFT(CAST(name as BINARY), 10) USING utf8) as name from animal;
+----------+
| name     |
+----------+
| 犬ドッ   |
+----------+

LFETを使わず、CONVERTでBINARYの最大バイト数を決めて変換し、
再度CONVERTで変換しても同じ結果になります。

mysql> select CONVERT(CONVERT(name BINARY(10) USING utf8) as name from animal;
+----------+
| name     |
+----------+
| 犬ドッ   |
+----------+

Translate

このブログを検索

フォロワー

QooQ