首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql:从cp1251转换为utf8

sql:从cp1251转换为utf8
EN

Stack Overflow用户
提问于 2018-02-13 20:51:56
回答 3查看 3.9K关注 0票数 0

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

数据库的部分:

我这样做了:

  1. mysqldump -u mysql -p conference_db --允许关键字-创建选项-完整-插入-默认-字符集=utf8 8--添加-下拉表> dump.sql
  2. 全部..。默认CHARESET=utf8更改为..。默认CHARESET=cp1251 (在创建表中)
  3. mysql -u mysql -p conference_db --默认字符集=-p 1251< dump.sql
EN

回答 3

Stack Overflow用户

发布于 2018-02-13 22:15:23

使用转储和还原操作很难做到这一点。

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

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

代码语言:javascript
复制
 INSERT INTO new_table
 SELECT journal_id, locale, setting_name, 
        CONVERT(setting_value USING utf8) setting_value
        setting_type
   FROM table
票数 0
EN

Stack Overflow用户

发布于 2018-02-17 02:48:50

表上的默认字符集并不重要。重要的是字符串列上的字符集。

回到原点;我担心失败的转换只会使事情变得更糟,更难以解开。

截图看起来很像"Mojibake“。(如果你能在你的问题中粘贴数据,我可以进一步分析。)请参阅https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored中的"Mojibake“中的错误。

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

票数 0
EN

Stack Overflow用户

发布于 2022-07-11 11:43:55

一篇老文章,但我在2022年也遇到了同样的问题,这条帖子是谷歌搜索结果中的第一条。

这个答案对我有用:如何将存储为LATIN1 ( sql )的西里尔字母转换成真正的UTF8西里尔字母?

如果您无意中发现了iconv: illegal input sequence at position 113498,则可以使用命令替换无效字符。

代码语言:javascript
复制
printf '-' | dd bs=1 seek=113498 conv=notrunc of=<your file with errors>

这将使连字符代替无效字符。

或者,可以通过将"-c“添加到iconv中来忽略无效字符:

代码语言:javascript
复制
iconv -c -f utf-8 -t latin1 < input.sql | iconv -f cp1251 -t utf-8 > output.sql
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48775423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档