我正在将一个小型陀螺仪应用程序从MySQL迁移到MariaDB。我之前问过这个问题,为什么MariaDB不会在latin1上作为服务器编码启动(当字符集server=latin1在my.cnf中时,MariaDB不会启动(,但现在我已经接受了只使用utf8。
导入数据转储后:
mysql -uwebuser -p ezine < dump.sql
,什么应该是autotöstus显示为autot??斯图斯。此外,我得到了这个错误:
非法混合排序规则(latin1_general_ci隐式(和(utf8_general_ci强制(,存储??
尝试1:我删除了数据转储中所有出现的charset=latin1,导入提前终止,并出现以下错误:
指定的密钥太长;最大密钥长度为767字节
尝试2:添加回charset,但将其设置为charset=utf8,根据这篇文章:MySQL将latin1数据转换为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
现在,在您的web应用程序中,您应该正确地看到autotöstus
从现在起,数据库的"本地货币"是utf8。在转储数据库时,必须小心,确保导出的文件仍然是latin1编码的。否则,您将得到过度编码的数据,例如autotⶶstus。
mysqldump -uwebuser -p --default-char-set=latin1 ezine > dump.sql