256

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

4

10 回答 10

317

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

于 2010-11-19T03:57:56.923 回答
135

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

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

这是他的回答。您可以在这里阅读更多关于 CAST 的内容。我希望它可以帮助一些人。

于 2009-06-04T01:35:25.393 回答
18

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

  1. 在表中为每个 blob 列创建文本类型的新列
  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;
于 2014-03-12T11:15:32.217 回答
13

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

截屏

于 2019-01-14T06:49:08.687 回答
9

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

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

上面的查询对我有用。我希望它也能帮助你。

于 2015-08-21T13:11:24.257 回答
6

这些答案都不适合我。转换为 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))
于 2019-08-12T20:33:00.747 回答
3

phpMyAdmin 截图使用 phpMyAdmin,您还可以设置显示 BLOB 内容和显示完整文本的选项。

于 2020-04-15T12:38:29.083 回答
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 ;
于 2013-07-08T15:32:09.253 回答
0
SELECCT TO_BASE64(blobfield)  
FROM the Table

为我工作。

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

于 2021-02-22T17:20:13.707 回答
0

我的 MariaDB 记录也有同样的问题。(由我的同事)使用

select
uncompress(blobfield)
from table
于 2021-10-21T15:15:49.220 回答