MySQLのblobにテキストが保存されているレコードがたくさんあります。処理を簡単にするために、データベースの形式をTEXTに変更したいと思います...データを中断しないように変更を加えるのがいかに簡単かというアイデア-適切にエンコードする必要があると思いますか?
MySQLのblobにテキストが保存されているレコードがたくさんあります。処理を簡単にするために、データベースの形式をTEXTに変更したいと思います...データを中断しないように変更を加えるのがいかに簡単かというアイデア-適切にエンコードする必要があると思いますか?
回答:
それは不要です。SELECT CONVERT(column USING utf8) FROM
単にSELECT column FROM
...の代わりに.....を使用してください...
私は同じ問題を抱えていましたが、これが私の解決策です:
ALTER TABLE mytable ADD COLUMN field1_new TEXT NOT NULL, ADD COLUMN field2_new TEXT NOT NULL; update mytable set field1_new = CONVERT(field1 USING utf8), field2_new = CONVERT(field2 USING utf8); alter table mytable drop column field1, drop column field2; alter table mytable change column field1_new field1 text, change column field2_new field2 text;
とても簡単にできます。
ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
上記のクエリでうまくいきました。参考になれば幸いです。
または、この関数を使用できます。
DELIMITER $$
CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$
DELIMITER ;
これらの答えはどれもうまくいきませんでした。UTF8に変換するときに、エンコーダーがバイトのセットを検出すると、UTF8に変換できないため、?データ損失を引き起こす置換。UTF16を使用する必要があります。
SELECT
blobfield,
CONVERT(blobfield USING utf16),
CONVERT(CONVERT(blobfield USING utf16), BINARY),
CAST(blobfield AS CHAR(10000) CHARACTER SET utf16),
CAST(CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) AS BINARY)
MySQL Workbenchでバイナリ値を検査できます。フィールドを右クリック->ビューアで値を開く->バイナリ。BINARYに戻すと、バイナリ値は元の値と同じになります。
または、この目的のために作成されたbase-64を使用することもできます。
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))
SELECT CONVERT(column USING utf8) FROM table;