sql:从 cp1251 转换为 utf8

Posted

技术标签:

【中文标题】sql:从 cp1251 转换为 utf8【英文标题】:sql: converting from cp1251 to utf8 【发布时间】:2018-07-24 07:57:45 【问题描述】:

如何编译将表列从 cp1251 转换为 utf8 的 SQL 查询。我的数据库和里面所有的表都是utf8的编码,但是里面的信息在cp1251上。由于此信息显示不正确。设置中的编码的简单更改将它们变成其他难以理解的符号。我试图在转储中更改DEFAULT CHARESET,但它也没有帮助:(也许还有其他方法?

部分数据库:

我这样做了:

    mysqldump -u mysql -p Conference_db --allow-keywords --create-options --complete-insert --default-character-set=utf8 --add-drop-table > dump.sql 所有 ...DEFAULT CHARESET=utf8 更改为 ...DEFAULT CHARESET=cp1251(在 CREATE TABLE 中) mysql -u mysql -p conference_db --default-character-set=cp1251

【问题讨论】:

【参考方案1】:

表上的 default 字符集无关紧要。重要的是字符串列上的字符集。

备份到原来的;我担心失败的转换只会让事情变得更糟,更难解开。

截图看起来很像“Mojibake”。 (如果您可以将数据粘贴到您的问题中,我可以进一步分析。)请参阅here 中的“Mojibake”了解是什么错误导致的。

如需恢复数据方面的帮助,请提供SHOW CREATE TABLESELECT HEX(col) ...,以便我们查看您的数据。 (“来自 cp1251 的列”不明确)。

【讨论】:

【参考方案2】:

转储和恢复操作很难做到这一点。

但是,您可以在 SELECT 语句中使用 CONVERT operation: CONVERT(column USING utf8) 转换违规列的字符集

例如,如果您有一个新的空表,其列上的字符集正确,这会将旧表复制到新表并进行转换。

 INSERT INTO new_table
 SELECT journal_id, locale, setting_name, 
        CONVERT(setting_value USING utf8) setting_value
        setting_type
   FROM table

【讨论】:

谢谢!但这并没有帮助。=(事实上该列已经有编码utf8。但是里面的文本类似于cp1251。每次我尝试使用转换函数时,他们都会将此文本作为utf8。

以上是关于sql:从 cp1251 转换为 utf8的主要内容,如果未能解决你的问题,请参考以下文章

Win1251->UTF16转换

Ubuntu上的库ICU不希望从Unicode转换为windows-1251

MySQL Convert latin1 to utf8, cp1252 0x80-0x9F 错误

在 Eclipse 中更改编码

c++ 如何转换UTF8编码??

如何将php shell的exec输出转换为utf8