Как мне конвертировать из BLOB в TEXT в MySQL?

173

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

Теги:

5 ответов

217

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

  • 9
    Это не работает для меня.
  • 20
    Использование: SELECT CONVERT(column USING utf8) FROM table;
Показать ещё 2 комментария
123

Вот пример человека, который хочет преобразовать BLOB-объект в char (1000) с кодировкой UTF-8:

CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)

Это его ответ. Существует, вероятно, гораздо больше, вы можете прочитать о CAST прямо здесь. Я надеюсь, что это поможет некоторым.

  • 5
    К сожалению, это не работает для меня. Я получаю пустые строки и иногда только 1-символьный вывод со странными символами.
  • 0
    Работал и в запросе выбора, в качестве содержимого выберите A.id, CAST (B.content AS CHAR (10000) CHARACTER SET utf8), Bb из A-соединения B ON B.content_id = A.content_id
12

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

  • создайте новые столбцы типа 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;
  • 1
    Это единственный ответ, который работал для меня, спасибо :)
  • 0
    Промежуточная колонна сделала свое дело. Продолжал получать ошибки, ссылаясь на плохих персонажей через все другие методы и ответы. Спасибо
7

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

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

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

1

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

DELIMITER $$

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


DELIMITER ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню