如何在MySQL中从BLOB转换为TEXT?

时间:2009-06-04 01:28:50

标签: sql mysql blobs

我有很多记录,其中文本存储在MySQL的blob中。为了便于处理,我想将数据库中的格式更改为TEXT ...任何想法如何轻松地进行更改以便不中断数据 - 我想它需要正确编码?

9 个答案:

答案 0 :(得分:216)

这是不必要的。只需使用SELECT CONVERT(column USING utf8) FROM .....而不仅仅是SELECT column FROM ...

答案 1 :(得分:127)

以下是a person想要使用UTF-8编码将blob转换为char(1000)的示例:

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

这是他的答案。您可以阅读有关CAST right here的更多内容。我希望它有所帮助。

答案 2 :(得分:14)

我遇到了同样的问题,这是我的解决方案:

  1. 在表格中为每个blob列创建新的text类型列
  2. 将所有blob转换为文本并将其保存在新列中
  3. 删除blob列
  4. 将新列重命名为已删除列的名称
  5. 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;
    

答案 3 :(得分:8)

你可以很容易地做到。

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

以上查询对我有用。我希望它对你也有所帮助。

答案 4 :(得分:3)

如果您使用的是 MYSQL-WORKBENCH ,则可以正常选择Blob列,然后右键单击该列,然后单击在编辑器中打开值。请参阅屏幕截图:

screenshot

答案 5 :(得分:2)

phpMyAdmin screenshot您还可以使用phpMyAdmin设置显示BLOB内容和显示全文的选项。

答案 6 :(得分: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 ;

答案 7 :(得分:0)

这些答案都不对我有用。转换为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中检查二进制值。右键单击字段->在查看器中打开值->二进制。当转换回BINARY时,二进制值应与原始值相同。

或者,您可以仅使用为此目的而设计的base-64:

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))

答案 8 :(得分:0)

SELECCT TO_BASE64(blobfield)  
FROM the Table

为我工作。

CAST(blobfield AS CHAR(10000) CHARACTER SET utf8) 和 CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) 没有显示我想要的文本值。