2009-06-04 14 views
159

Mam wiele rekordów, w których tekst został zapisany w obszarze blob w MySQL. Dla ułatwienia obsługi chciałbym zmienić format w bazie danych na TEKST ... Wszelkie pomysły, jak łatwo dokonać zmiany, aby nie przerywać danych - myślę, że będzie to musiało być poprawnie zakodowane?Jak przekonwertować z obiektu BLOB na tekst w MySQL?

Odpowiedz

120

Po przejściu przez ciebie google, znalazłem this. Jest to odpowiedź na osobie, która chce przekształcić blob do char (1000) z kodowaniem UTF-8:

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

to jego odpowiedź. Jest prawdopodobnie o wiele więcej informacji na temat CAST right here. Mam nadzieję, że to pomaga niektórym.

+5

Niestety to nie działa dla mnie. Dostaję puste wiersze, a czasami tylko 1-znakowe wyjście z dziwnymi symbolami. – C4u

+0

pracował w wybranych zapytania, jak również, wybrać A.id, odlewane (B.content jako CHAR (10000) utf8 CHARAKTERYSTYKA SET), jako zawartość Bb od A przyłączenia B NA B.content_id = A.content_id – dkb

168

To niepotrzebne. Wystarczy użyć SELECT CONVERT(column USING utf8) FROM ..... zamiast tylko SELECT column FROM ...

+6

ten nie działa dla mnie. – chaostheory

+19

Użycie: 'SELECT CONVERT (kolumna UŻYJ utf8) OD tabeli;' – bmaupin

+4

Działa to doskonale dla tych GROUP_CONCAT, które konwertują twoje dane wyjściowe na bloby i naprawdę chcesz je jako łańcuchy. Miałem problem podobny do OP podczas używania Node.JS z biblioteką node-mysql - to naprawiło wszystkie problemy group_concat. – marksyzm

1

Albo można użyć tej funkcji:

DELIMITER $$ 

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


DELIMITER ; 
11

miałem ten sam problem, i tu jest moje rozwiązanie:

  1. tworzyć nowe kolumny typu tekst w tabeli dla każdej kolumny blob
  2. przekonwertować wszystkie plamy do tekstu i zapisywać je w nowych kolumnach
  3. usunąć th e blob kolumny
  4. zmiany nazwy nowych kolumn do nazw usuniętych te
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; 
+0

To jest jedyna odpowiedź, która zadziałała dla mnie, dzięki :) – Tom

7

można to zrobić bardzo łatwo.

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

Powyższe zapytanie zostało wykonane dla mnie. Mam nadzieję, że ci to pomoże.

Powiązane problemy