客户端编码
character_set_client、character_set_connection、character_set_results这3个参数值是由客户端每次连接进来设置的,和服务器端没关系。
当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_client、character_set_connection、character_set_results这三个值。
如果我们想告诉mysql server自己本次连接想使用latin1:
mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1
服务端编码
一般都是utf8
MariaDB [config2]> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) #检查所有的编码方式
最优状态:
在建表时,DEFAULT CHARSET=utf8,客户端连接用utf8,这样,前后端所有的编码都是统一的,输入输出都不会出现麻烦的编码问题。
麻烦的就是一些线上运行的库因为历史原因,表就是latin1之类,在里面存中文,在用django等工具时,编码问题就很讨厌。