Как преобразовать из BLOB в TEXT в MySQL?

У меня есть много записей, где текст хранился в блобе в MySQL. Для удобства обработки я хотел бы изменить формат в базе данных на TEXT... Любые идеи, как легко внести изменения, чтобы не прерывать данные - я думаю, что он должен быть правильно закодирован?

Ответ 1

Это лишнее. Просто используйте SELECT CONVERT(column USING utf8) FROM..... вместо просто SELECT column FROM...

Ответ 3

У меня была та же проблема, и вот мое решение:

  • создайте новые столбцы типа text в таблице для каждого столбца blob
  • преобразовать все капли в текст и сохранить их в новых столбцах
  • удалить столбцы blob
  • переименуйте новые столбцы в имена удаленных.
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;

Ответ 4

Вы можете сделать это очень легко.

ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;

Этот запрос работал у меня. Надеюсь, это тоже поможет.

Ответ 5

Если вы используете MYSQL-WORKBENCH, вы можете выбрать столбец blob обычным способом, щелкнуть правой кнопкой мыши по столбцу и щелкнуть открыть значение в редакторе. см. скриншот:

screenshot

Ответ 6

Или вы можете использовать эту функцию:

DELIMITER $$

CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
       RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$


DELIMITER ;

Ответ 7

Ни один из этих ответов не работал для меня. При преобразовании в 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))