У меня есть много записей, где текст был сохранен в BLOB-объекте в MySQL. Для простоты обработки я хотел бы изменить формат в базе данных на TEXT ... Есть идеи, как легко внести изменения, чтобы не прерывать данные - я думаю, это нужно будет правильно кодировать?
Это не нужно. Просто используйте SELECT CONVERT(column USING utf8) FROM ..... вместо просто SELECT column FROM ...
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 ;