2009-06-04 66 views
159

Tôi có rất nhiều bản ghi mà văn bản đã được lưu trữ trong một blob trong MySQL. Để dễ xử lý, tôi muốn thay đổi định dạng trong cơ sở dữ liệu thành TEXT ... Bất kỳ ý tưởng nào dễ dàng thực hiện thay đổi để không làm gián đoạn dữ liệu - tôi đoán nó sẽ cần phải được mã hóa đúng cách?Làm cách nào để chuyển đổi từ BLOB sang TEXT trong MySQL?

Trả lời

120

Sau một số googling cho bạn, tôi đã tìm thấy this. Đây là một câu trả lời cho một người muốn chuyển đổi một blob để char (1000) với UTF-8 mã hóa:

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

Đây là câu trả lời của mình. Có lẽ bạn có thể đọc nhiều hơn về CAST right here. Tôi hy vọng nó sẽ giúp một số.

+5

Thật không may điều này không hoạt động đối với tôi. Tôi nhận được hàng trống và đôi khi chỉ có 1 ký tự đầu ra với các biểu tượng lạ. – C4u

+0

Làm việc trong chọn truy vấn là tốt, chọn A.id, CAST (B.content AS CHAR (10000) CHARACTER SET utf8) như nội dung, Bb từ A tham gia B ON B.content_id = A.content_id – dkb

168

Điều đó không cần thiết. Chỉ cần sử dụng SELECT CONVERT(column USING utf8) FROM ..... thay vì chỉ SELECT column FROM ...

+6

này không làm việc cho tôi. – chaostheory

+19

Cách sử dụng: 'SELECT CONVERT (cột SỬ DỤNG utf8) TỪ bảng;' – bmaupin

+4

Điều này phù hợp với những GROUP_CONCAT chuyển đổi kết quả của bạn thành các đốm màu và bạn thực sự muốn chúng thành chuỗi. Tôi đã có một vấn đề tương tự như của OP trong khi sử dụng Node.JS với thư viện node-mysql - điều này cố định tất cả các vấn đề group_concat. – marksyzm

1

Hoặc bạn có thể sử dụng chức năng này:

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

Tôi đã có cùng một vấn đề, và đây là giải pháp của tôi:

  1. tạo cột mới của văn bản loại trong bảng cho mỗi cột blob
  2. chuyển đổi tất cả các đốm màu thành văn bản và lưu chúng trong cột mới
  3. xóa thứ e cột blob
  4. đổi tên các cột mới với tên của những người bỏ
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

Đây là câu trả lời duy nhất phù hợp với tôi, cảm ơn :) – Tom

7

Bạn có thể làm điều đó rất dễ dàng.

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

Truy vấn ở trên đã hiệu quả đối với tôi. Tôi hy vọng nó cũng giúp bạn.

Các vấn đề liên quan