问题分析
MySQL创建数据库时指定编码很重要,很多开发者都使用了默认编码,安装了之后不会再去设置编码的问题(当然可能我很初级的原因),乱码问题可是防不胜防。
网页数据一般采用UTF8编码,而数据库默认为latin1 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。
我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来,我们可以通过命令查看数据库当前编码:
mysql> SHOW VARIABLES LIKE 'character%';
这里写图片描述
这是在出现乱码的时候显示的内容,发现很多对应的都是 latin1,我们的目标就是在下次使用此命令时latin1能被UTF8取代。 问题解决
- 1、第一阶段:*
在mysql控制台通过编码命令进行设置:
SET character_set_client = utf8; SET character_set_connection = utf8; SET character_set_database = utf8; SET character_set_results = utf8; SET character_set_server = utf8;
然后 mysql> SHOW VARIABLES LIKE 'character%'; 你可以看到全变为 utf8 。
但是,这只是一种假象。此种方式只在当前状态下有效,当重启数据库服务后失效。 自己可以尝试一下!
这也是网上很多的解决方法,不见效果,自己当时也尝试了很多次,不成功!这里提出来,希望大家不要采坑!
- 2、第二阶段:*
如何正确的修改,我们只有修改my.cnf(一般都是在/etc/my.cnf目录下)文件,
从my.cnf下手(标签下没有的添加,有的修改)
补充:
在Server version: 5.7.17 MySQL Community Server (GPL)版本中,配置文件的位置是:/etc/mysql/mysql.conf.d/mysqld.cnf
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8
以上3个section都要加default-character-set=utf8,平时我们可能只加了mysqld一项。
注意:上边的配置需要根据具体的mysql版本,不同的mysql版本可能不包含上述的三个section,也没有必要全部都设置,平时我们可能只加了mysqld一项。
例如我的配置文件和修改之后的效果(注意我的mysql版本):
这里写图片描述
我的这个my.cnf文件只有mysqld 这个section,因此可以直接加上default-character-set=utf8 即可。
如果,你的配置文件含有client、mysql 标签的话,可以在下边加入,例如下边的配置示例:
这里写图片描述
修改之后,然后重启mysql服务:
service mysqld restart
然后登入mysql控制台查看:
这里写图片描述