У мене є чимало записів, де текст зберігався в краплі в MySQL. Для зручності роботи я хотів би змінити формат у базі даних на ТЕКСТ ... Будь-які ідеї, як легко зробити зміни, щоб не перервати дані - я думаю, це потрібно буде правильно закодувати?
У мене є чимало записів, де текст зберігався в краплі в MySQL. Для зручності роботи я хотів би змінити формат у базі даних на ТЕКСТ ... Будь-які ідеї, як легко зробити зміни, щоб не перервати дані - я думаю, це потрібно буде правильно закодувати?
Відповіді:
Це зайве. Просто використовуйте SELECT CONVERT(column USING utf8) FROM
..... замість просто SELECT column FROM
...
Ось приклад людини, яка хоче перетворити крапку в 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 ;
За допомогою phpMyAdmin ви також можете встановити параметри для відображення вмісту BLOB та показу повного тексту.
Жодна з цих відповідей не працювала для мене. При перетворенні в 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. При перетворенні назад у BINARY бінарні значення повинні бути такими ж, як і вихідні.
Крім того, ви можете просто використовувати base-64, який був зроблений для цієї мети:
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))
SELECT CONVERT(column USING utf8) FROM table;