mysql - 将陀螺仪应用程序从 mysql (latin1) 迁移到 mariadb (utf8) 时出现字符编码问题

标签 mysql mariadb gyroscope-framework

我正在将一个小型陀螺仪应用程序从 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/

相关文章:

mysql - 简单的 SELECT 查询对于大表来说很慢

mysql - 使用 MariaDB 的 Ruby convert_tz 返回 nil

ubuntu-12.04 - MariaDB Galera 节点在重启后关闭

javascript - 如何解决升级陀螺仪时出现 "incomplete keychange"错误

mysql 年份低于 1900

mysql - 如何在mysql中插入多行

mysql - SQL 中的传递属性

mysql - php cli 脚本挂起,没有消息