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

197 mysql sql blobs

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

小智 234

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

  • 用法:`SELECT CONVERT(列USING utf8)FROM表;` (22认同)
  • 这适用于那些将输出转换为blob的GROUP_CONCAT,你真的希望它们作为字符串.在将Node.JS与node-mysql库结合使用时,我遇到了与OP类似的问题 - 这解决了所有group_concat问题. (4认同)
  • 这行不通。字符集需要是utf16,否则遇到无法转换为utf8的字节集会导致数据丢失。它将用 ? 替换这些字节。字符导致数据丢失。 (2认同)

Óla*_*age 127

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

CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)
Run Code Online (Sandbox Code Playgroud)

这是他的答案.你可以在这里阅读更多关于CAST的内容.我希望它有所帮助.

  • 不幸的是,这对我不起作用.我得到空行,有时只有带有奇怪符号的1个字符输出. (5认同)

Asp*_*ped 14

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

  1. 在表中为每个blob列创建类型为text的新列
  2. 将所有blob转换为文本并将其保存在新列中
  3. 删除blob列
  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;
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一对我有用的答案,谢谢:) (2认同)

Dea*_* Or 9

这些答案都不适合我。转换为 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)
Run Code Online (Sandbox Code Playgroud)

您可以在 MySQL Workbench 中检查二进制值。右键单击该字段 -> 在查看器中打开值 -> 二进制。当转换回 BINARY 时,二进制值应与原始值相同。

或者,您可以只使用为此目的而制作的 base-64:

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))
Run Code Online (Sandbox Code Playgroud)


小智 8

你可以很容易地做到这一点.

ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
Run Code Online (Sandbox Code Playgroud)

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


ank*_*kit 5

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

屏幕截图