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


214

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

Answers:


258

没必要 只需使用SELECT CONVERT(column USING utf8) FROM.....而不是SELECT column FROM...


24
用法:SELECT CONVERT(column USING utf8) FROM table;
bmaupin 2012年

4
这对于将您的输出转换为Blob的GROUP_CONCAT非常有用,并且您确实希望将它们作为字符串。在将Node.JS与node-mysql库一起使用时,我遇到了类似于OP的问题-这解决了所有group_concat问题。
markyzm

这项工作,也可以与热查询一起使用,例如CONVERT(LEFT(MD5([ID]),8)使用utf8)
ZenithS 17-4-28

这行不通。字符集必须为utf16,否则如果遇到无法转换为utf8的字节集,则会导致数据丢失。它将用?替换那些字节。字符导致数据丢失。
院长或

128

这是一个想要使用UTF-8编码将blob转换为char(1000)的人的示例:

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

这是他的答案。您可能在这里可以了解有关CAST的更多信息。希望对您有所帮助。


5
不幸的是,这对我不起作用。我得到空行,有时只有一个1字符的输出,带有奇怪的符号。
C4d

同样在选择查询中工作,选择A.id,CAST(B.content AS CHAR(10000)CHARACTER SET utf8)作为内容,来自A的Bb加入B ON B.content_id = A.content_id
dkb

15

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

  1. 在表中为每个Blob列创建类型为text的新列
  2. 将所有Blob转换为文本并将其保存在新列中
  3. 删除斑点列
  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;

2
这是唯一对我
汤姆(Tom)

中间一栏起到了作用。可以通过所有其他方法和答案来引用错误字符来避免出错。谢谢
gillytech '19


8

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

屏幕截图


2

或者您可以使用以下功能:

DELIMITER $$

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


DELIMITER ;

1

phpMyAdmin屏幕截图 使用phpMyAdmin,您还可以设置显示BLOB内容和显示全文的选项。


有人将如何去做呢?如果您发布一些代码和/或截屏详细说明了您的答案,那么它将对您有所帮助。
TrampolineTales

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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.