我有很多记录,其中文本存储在MySQL的blob中.为了便于处理,我想将数据库中的格式更改为TEXT ...任何想法如何轻松地进行更改以便不中断数据 - 我想它需要正确编码?
小智 234
那是不必要的.只需使用SELECT CONVERT(column USING utf8) FROM
.....而不仅仅是SELECT column FROM
......
Ó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的内容.我希望它有所帮助.
Asp*_*ped 14
我遇到了同样的问题,这是我的解决方案:
Run Code Online (Sandbox Code Playgroud)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;
这些答案都不适合我。转换为 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)
以上查询对我有用.我希望它对你也有帮助.