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

我这样做了:
发布于 2018-02-13 22:15:23
使用转储和还原操作很难做到这一点。
但是,可以使用转换操作:CONVERT(column USING utf8)在SELECT语句中转换违规列的字符集。
例如,如果您有一个新的空表,其中列上了正确的字符集,这将将旧表复制到新表并进行转换。
INSERT INTO new_table
SELECT journal_id, locale, setting_name,
CONVERT(setting_value USING utf8) setting_value
setting_type
FROM table发布于 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 TABLE和SELECT HEX(col) ...,以便我们可以看到您拥有的内容。(“来自cp1251的列”不明确)。
发布于 2022-07-11 11:43:55
一篇老文章,但我在2022年也遇到了同样的问题,这条帖子是谷歌搜索结果中的第一条。
这个答案对我有用:如何将存储为LATIN1 ( sql )的西里尔字母转换成真正的UTF8西里尔字母?
如果您无意中发现了iconv: illegal input sequence at position 113498,则可以使用命令替换无效字符。
printf '-' | dd bs=1 seek=113498 conv=notrunc of=<your file with errors>这将使连字符代替无效字符。
或者,可以通过将"-c“添加到iconv中来忽略无效字符:
iconv -c -f utf-8 -t latin1 < input.sql | iconv -f cp1251 -t utf-8 > output.sqlhttps://stackoverflow.com/questions/48775423
复制相似问题