У меня есть много записей, где текст хранился в блобе в MySQL. Для удобства обработки я хотел бы изменить формат в базе данных на TEXT... Любые идеи, как легко внести изменения, чтобы не прерывать данные - я думаю, что он должен быть правильно закодирован?
Это лишнее. Просто используйте SELECT CONVERT(column USING utf8) FROM
..... вместо просто SELECT column FROM
...
Вот пример человека, который хочет преобразовать BLOB-объект в char (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 ;
Этот запрос работал у меня. Надеюсь, это тоже поможет.
Или вы можете использовать эту функцию:
DELIMITER $$
CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$
DELIMITER ;
SELECT CONVERT(column USING utf8) FROM table;