很多年前我遇到了mysql乱码的问题。 最近又相遇了。
名为mysql的商品的默认代码为latin1 (例如latin1_swedish_ci )。 ——我不知道为什么这样。
近十年,主流的编码方式已经是utf8。 在mysql中,最初使用utf8_generalci与之匹配,然后逐渐使用utf8unicode_ci与之匹配。
令人惊讶的是,mysql数据库曾经从latin1转换为utf8。 但是,phpmyadmin会显示乱码,而程序会正常显示。 ——因此,如果不查看数据库,您可能不知道在mysql级别存储的数据一团糟。
但是,后期需要传输数据或恢复数据时,很可能会发现这些乱码,程序读取后的文字也是乱码。
今晚找到半天,终于在棘手的latin1上找到了解决utf-8问题的办法。
解决方案的主要思路是在备份过程中首先以latin1格式检索数据,因为原始数据是latin1格式。
mysqldump-c-h localhost--用户用户名--password=用户密码--- default-character-set=latin1---skip-seset
将此压缩包中的文件另存为utf8格式的sql文件后,在顶部添加此行。
set character _ set _ connection=utf8,character_set_results=utf8,character_set_client=binary;
然后重新导入就可以了。
在“ghost中文网”Alibaba云服务器上安装ghost---MySQL安装介绍了如何设置MySQL的默认字符集:
1、编辑/etc/mysql/my.cnf
nano -w /etc/mysql/my.cnf
2、找到[mysqld]段落,添加以下三行: 如果没有名为3354[MySQLD]的行,请首先添加新行
collation-server=utf8 _ unicode _ ci init-connect=' setnamesutf8' character-set-server=utf8
重新启动mysql可以避免mysql采用奇怪的latin1字符集。