0

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

部分数据库:

在此处输入图像描述

我这样做了:

  1. mysqldump -u mysql -p Conference_db --allow-keywords --create-options --complete-insert --default-character-set=utf8 --add-drop-table > dump.sql
  2. 全部 ... DEFAULT CHARESET=utf8更改为 ... DEFAULT CHARESET=cp1251(在 CREATE TABLE 中)
  3. mysql -u mysql -p 会议数据库 --default-character-set=cp1251 < dump.sql
4

2 回答 2

0

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

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

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

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

于 2018-02-17T02:48:50.380 回答
0

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

但是,您可以使用CONVERT 操作在 SELECT 语句中转换违规列的字符集: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
于 2018-02-13T22:15:23.097 回答