我正在将一个小型陀螺仪应用程序从 MySQL 迁移到 MariaDB。我之前问过这个问题,为什么 MariaDB 不会在 latin1 上启 Action 为服务器编码( MariaDB won't start when character-set-server = latin1 is in my.cnf ),但现在我已经接受只使用 utf8 了。
导入数据转储后:
mysql -uwebuser -p ezine < dump.sql
,原本应该是 autotööstus 的内容却显示为 autot??stus。另外我得到了这个错误:
非法混合排序规则(latin1_general_ci 隐式)和(utf8_general_ci 强制),存储 ??
尝试 1:我删除了数据转储中所有出现的 charset=latin1,并且导入因以下错误而提前终止:
指定的 key 太长;最大 key 长度为 767 字节
尝试2:添加回字符集,但将其设置为charset=utf8,根据这篇文章:MySQL Convert latin1 data to UTF8
导入有效,但 autotööstus 现在显示为 autotööstus
如何将数据转储解释为 latin1 编码内容,但存入 utf8 存储?
最佳答案
如果您出于某种原因无法使用 latin1 作为默认系统编码,这里有一个快速解决方案:
保持数据转储不变。即使它是 latin1 编码,也可以导入为 utf8。
mysql> create database ezine character set utf8 collate utf8_general_ci;
mysql -uwebuser -p --default-character-set=utf8 ezine < dump.sql
现在,在您的网络应用中,您应该可以正确地看到 autotööstus
从现在开始,您的数据库的“ native 货币”是utf8。转储数据库时,必须小心,确保导出的文件仍然是 latin1 编码。 否则,您最终会得到过度编码的数据,例如 autotබstus。
mysqldump -uwebuser -p --default-char-set=latin1 ezine > dump.sql
关于mysql - 将陀螺仪应用程序从 mysql (latin1) 迁移到 mariadb (utf8) 时出现字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927262/