本文从关闭数据库开始讲解如何设置mysql的编码字符集,解决乱码问题
关于在从客户端到数据库服务器之间编码转换的过程可以参考这篇:http://blog.itpub.net/29272216/viewspace-1243705
设置字符集流程:
1. 关闭数据库 -> service mysqld stop
2. 修改my.cnf文件设置默认字符集-> linux该文件一般在 /etc/my.cnf , 没有的话手动创建.
default-character-set = utf8
character_set_server = utf8
这种好像是永久修改,重启也生效,但是我设置了并没用
3. 设置数据库的默认编码:
set character_set_client = utf8mb4;
set character_set_connection = utf8mb4;
set character_set_database = utf8mb4;
set character_set_results = utf8mb4;
set character_set_server = utf8mb4;
这个是临时修改,重启了就恢复默认了.
关于每个编码的作用:https://blog.csdn.net/sun8112133/article/details/79921734
最好还是查看官方文档,别人的博客感觉都理解的不是很靠谱。
4. 重启数据库: service mysql restart
以上步骤很可能是错误的!!!!!!!
下面的更靠谱一些:
这篇两篇博客讲了MySQL的在传输过程中的编解码过程 :
https://blog.csdn.net/kxcfzyk/article/details/35283041
https://blog.csdn.net/kxcfzyk/article/details/37723367
个人理解 上述第三步中的设置编码方式 其实只是设置当前客户端使用的编码,所以会发现重启数据库后再次进入发现又都恢复默认了。
其实还是在创建数据库和建表的时候记得声明下编码格式更靠谱一些:
CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE `plan_notice` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
看到一个靠谱的解释: