问题起因:
静哥在服务器上的mysql容器中创建了一个eduteach数据库,创建的时候没有设置charset属性,由于之前没有配置mysql的charset属性导致默认的都是Latinl,最终结果就是保存的中文都是乱码
分析原因:
1.mysql不能识别中文,查看mysql特性,发现所有的都是latinl所以肯定不能识别。
mysql> show variables like '%character%';
解决方案:
1.修改mysql的配置文件(不知道配置文件在哪的可以往后看!!这里必须注释掉多余的,亲测只留下3个utf8是没问题的,加上其他的话可能character_set_database这个可能还是latinl)
[root@chl /]# cd /mydata/mysql/conf/
[root@chl conf]# ls
my.cnf
[root@chl conf]# cat my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
#init_connect='SET collation_connection = utf8_unicode_ci'
#init_connect='SET NAMES utf8'
character-set-server=utf8
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#collation-server=utf8_unicode_ci
#skip-character-set-client-handshake
#skip-name-resolve
2.配置完成后重启mysql,显示属性如下说明,配置成功。
docker restart mysql
3.进入到mysql容器控制台中执行
show variables like '%character%';
4.添加一组中文测试,发现仍然不能添加中文,这是因为你是以latinl的编码方式创建的,所以这个时候你只要重新创建数据库,或者表,再重新添加就可以了。
分析后的问题延伸:
问题起因:
根据教程填写了配置文件,但是反复实现发现配置文件在mysql中就不起作用
分析原因:
可能我写的配置名称不对,甚至配置文件路径不能被mysql读到。
解决方案:(下面两种方式都能解决问题,但是第二种更方边)
1.查看mysql 的默认配置路径,只需要在conf.d 中创建一个my.cnf写上配置信息就可以实现。
root@23c2b031baab:/etc/mysql# cat my.cnf
2.因为我使用的是容器mysql所以,只有在生成容器的时候才能挂载卷。因为我开始的挂载位置不在默认路径所以,修改的配置文件不能被读取。
解决方法:
1.将本地的mysql 生成镜像,重新配置容器。
2.利用软连接,实现默认路径下可以读取到我写的配置文件
root@23c2b031baab:/etc/mysql/conf.d# ln -s /var/etc/mysql/my.cnf ./my.cnf第一个/var/etc/mysql/my.cnf源文件路径,也就是真正存储的地方。./my.cnf自动生成的快捷方式。
其中涉及到的docker指令和mysql指令:
docker exec -it mysql /bin/bash 进入mysql容器的系统中
docker restart mysql 重启mysql
ln -s /var/etc/mysql/my.cnf ./my.cnf 设置软连接
cat my.cnf查看mysql默认配置路径
show variables like '%char%';查看mysql当前属性