Как мне конвертировать из BLOB в TEXT в MySQL? - PullRequest
191 голосов
/ 04 июня 2009

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

Ответы [ 6 ]

217 голосов
/ 19 ноября 2010

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

127 голосов
/ 04 июня 2009

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

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

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

14 голосов
/ 12 марта 2014

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

  1. создание новых столбцов типа text в таблице для каждого столбца BLOB-объектов
  2. преобразовать все капли в текст и сохранить их в новых столбцах
  3. удалить столбцы BLOB-объектов
  4. переименовать новые столбцы в имена удаленных
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;
8 голосов
/ 21 августа 2015

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

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

Приведенный выше запрос работал для меня. Надеюсь, вам это тоже поможет.

3 голосов
/ 14 января 2019

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

screenshot

1 голос
/ 08 июля 2013

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

DELIMITER $$

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


DELIMITER ;
...