我有很多记录,其中文本已存储在 MySQL 的 blob 中。为了便于处理,我想将数据库中的格式更改为 TEXT ...任何想法如何轻松地进行更改以免中断数据 - 我想它需要正确编码?
10 回答
那是不必要的。只需使用SELECT CONVERT(column USING utf8) FROM
......而不是SELECT column FROM
......
这是一个想要使用UTF-8编码将 blob 转换为 char(1000)的人的示例:
CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)
这是他的回答。您可以在这里阅读更多关于 CAST 的内容。我希望它可以帮助一些人。
我遇到了同样的问题,这是我的解决方案:
- 在表中为每个 blob 列创建文本类型的新列
- 将所有 blob 转换为文本并将它们保存在新列中
- 删除 blob 列
- 将新列重命名为已删除列的名称
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;
你可以很容易地做到这一点。
ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
上面的查询对我有用。我希望它也能帮助你。
这些答案都不适合我。转换为 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))
或者您可以使用此功能:
DELIMITER $$
CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$
DELIMITER ;
SELECCT TO_BASE64(blobfield)
FROM the Table
为我工作。
CAST(blobfield AS CHAR(10000) CHARACTER SET utf8) 和 CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) 没有显示我想要获得的文本值。
我的 MariaDB 记录也有同样的问题。(由我的同事)使用
select
uncompress(blobfield)
from table