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

如何编译将表列从 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 conference_db --default-character-set=cp1251

【问题讨论】:

    标签: mysql sql unicode converter character-set


    【解决方案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。
      猜你喜欢
      • 2016-01-12
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2015-04-09
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多