1
写这篇是为了记录探索 常用的mysql字符集-因为百度没查到想要的-就只有自己来了
最初的问题是:我把所有字符集设置为utf8,但是insert中文会出错,看到一篇文章后明白,是cmd窗口的字符集为gbk(右键cmd窗口-属性),而mysql客户端以utf8解析出错
然后为了避免此问题,我试图将mysql客户端的字符集设置为gbk,修改了配置文件my.ini如下:
default-character-set=gbk
只需要重启mysql客户端,insert语句确实成功的执行了
2
由此我决定认真理清mysql的字符集,减少这些问题,于是遇到了两个新问题:
2.1
show variables like "%char%"; 与 show global variables like "%char%";
在不重启mysqld的情况,分别修改了
[mysql]
default-character-set=字符集
[mysqld]
character-set-server=字符集
然后调用这两个命令查看结果
得出结论:show global variables like "%char%";所得在不重启mysqld 的情况下是不会改变的,应该是启动mysql服务时,由 [mysqld]指定,且不能更改
而show variables like "%char%";中的三种(client-connection-result),会因 [mysql]的改变而改变,具体原因见官网,这里主要是探索global是什么
2.2
而当我发现是这三者被改变时-引起了下一个问题:connection的定义是什么:
因为我之前百度了一些,多是copy,说:服务端接收到的客户端的请求格式为client,之后会将client的格式转化为connection的格式,然后交由服务端处理
也就是说,如果server是utf8,那么connection的格式也应该是utf8才对
而这里的connection,显然和client是绑定的。
所以我需要讨论这三者的关系:
我设置
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
并重新启动了mysqld(mysql也是需要重启的):此时所有编码都是utf8
然后就出现了诡异的事情
第一次,set character_set_client=gbk; 运行是会成功的;但是查询出来的值是乱码,set character_set_result=gbk; 然后查询正常
但此时有个问题,connection任然是utf8,而不是gbk,并不影响任何语句,它到底有什么用
第二次 set character_set_client=utf8 ; set character_set_connection=gbk; set character_set_result=utf8;
执行会成功,但是查询乱码,且根据文首的描述set character_set_client=utf8 ;应该会出错才对,但是语句是成功了,只是乱码而已
--------------先到这了,休息
client =utf8 client =gbk
connction= utf8 报错 正常
connction=gbk 乱码(预期报错) 正常
------------在(二)https://blog.csdn.net/weixin_42240941/article/details/116698943里面继续