本文转载自微信公众号“于大胆的推特”,作者于大胆。转载本文请在twitter上大胆联系Yu公众号。最近迁移了mysql,升级了mysql版本,遇到了很多乱码(主要是表达式问题),记录一下。mysql字符集支持四种级别的字符集和对应的比较规则,比如服务器级别的character_set_server,数据库级别的character_set_database,还可以在表级别和列级别设置字符集,例如:createdatabasetestCHARSETsetutf8mb4COLLATEutf8_general_ci另外,字符集比较也需要遵循规则,比较常用的比较规则是utf8_general_ci。一般在服务器启动时配置:[mysqld]character_set_server=utf8mb4在安装和创建数据库表时,尽量使用utf8mb4字符集。对于客户端(如程序驱动、mysql工具集),有3个与字符集相关的系统变量,分别是character_set_client、character_set_connection、character_set_results,用于客户端编解码,与数据库交互。这三个参数实际上是由default-character-set或setnames一次性指定的。具体遇到的问题是:1:mysql导入导出指定default-character-set为utf8mb4,否则会出现乱码。2:server级别的字符集配置为utf8mb4,即使不指定library、table、column,也会继承server级别的配置。3;mysql工具集,尝试显示指定的-default-character-set字符集,例如:[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb44:如果有代理,必须在proxy上指定字符集5:不知道有没有问题,通过phpmyadmin查看修改,特别是查看它执行的mysql语句。6:编译时指定字符集,例如:cmake-DDEFAULT_CHARSET=utf8mb4-DEXTRA_CHARSETS=all-DDEFAULT_COLLATION=utf8mb4_general_ci参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.网页格式
