我有很多记录,其中文本存储在MySQL的blob中。为了便于处理,我想将数据库中的格式更改为TEXT ...任何想法如何轻松地进行更改以便不中断数据 - 我想它需要正确编码?
答案 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)
我遇到了同样的问题,这是我的解决方案:
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)
答案 5 :(得分:2)
答案 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) 没有显示我想要的文本值。