Ответ 1
Это лишнее. Просто используйте SELECT CONVERT(column USING utf8) FROM
..... вместо просто SELECT column FROM
...
У меня есть много записей, где текст хранился в блобе в MySQL. Для удобства обработки я хотел бы изменить формат в базе данных на TEXT... Любые идеи, как легко внести изменения, чтобы не прерывать данные - я думаю, что он должен быть правильно закодирован?
Это лишнее. Просто используйте SELECT CONVERT(column USING utf8) FROM
..... вместо просто SELECT column FROM
...
Вот пример человека, который хочет преобразовать большой двоичный объект в символ (1000) с кодировкой UTF-8 :
CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)
Это его ответ. Наверное, о CAST можно прочитать гораздо больше здесь. Надеюсь, это поможет некоторым.
У меня была та же проблема, и вот мое решение:
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 ;
Этот запрос работал у меня. Надеюсь, это тоже поможет.
Если вы используете MYSQL-WORKBENCH, вы можете выбрать столбец blob обычным способом, щелкнуть правой кнопкой мыши по столбцу и щелкнуть открыть значение в редакторе. см. скриншот:
Или вы можете использовать эту функцию:
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. Щелкните правой кнопкой мыши по полю → Открыть значение в Viewer-> Двоичный файл. При преобразовании обратно в BINARY двоичные значения должны совпадать с исходными.
Кроме того, вы можете просто использовать base-64, который был сделан для этой цели:
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))