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 TABLE
和SELECT 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的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu上的库ICU不希望从Unicode转换为windows-1251