Linux中mysql5.7修改character_ set_ database为utf8
起因:
使用mysql,在表中插入中文字符的时候报错。原因是表的charset是latin1,不支持中文。将charset改成utf8就可以插入中文字符。
他默认建表的时候使用的编码是latin1,于是想修改其默认character_ set_ database为utf8。在网上找了很多资料。最终有篇博客解决此问题。https://www.cnblogs.com/007sx/p/5965644.html
上边链接博客是的windows上修改的是my.ini ; 笔者修改的是/etc/my.cnf ,里面的参数内容是相通的。
网上有的博客说mysql5.7对此选项有BUG 、建议升级到8.0.。
个人感觉这里的character_ set_ database与默认项 、 库 、表都有所关联。
情况如下:
1、修改完my.cnf配置重启
2、 登录,查看character 属性,此时是utf8
3、创建表D ,随后查看表D属性,发现是latin1 !?
4、再次查看character属性,md 怎么变回latin1了
在这里就不是很理解为什么原先的utf8会变成latin1 。
最终
使用show create database HA; 发现库HA的charset是latin1,在他里面创建的表都会变成latin1.
于是创建了个新database叫HB,
原先HA是 latin1,他下面的表,就算默认调整为utf8.下次创建 他还是latin。感觉有点像继承的关系
HB是我刚才新建的,由于my.cnf设置默认是utf8 ,他创建是utf8 。 HB下面的表 随后创建也是utf8 。
感觉是要表和库的charset要一致才行得通。
修改语句:
create database testB character set utf8;
alter database testB default character set utf8;
=====================分割线=========================
在此之后继续做了测试,明白 utf8 为什么会变 latin1了。 其实两者并没有关联。
刚登进mysql,此时使用show variables like 'character%';, 此时显示的可能是系统某个表的字符集。
随后 use HA; 切换到HA库,他原先是latin1,建表后,所以再次使用show variables like 'character%'; ,他展示的是latin1.这是没问题的。
所以 改了 my.cnf后,还要看database库本身的charset 。 否则建的表跟库的charset是“绑定”的
(
修改my.cnf后,他不会影响原先的database的参数属性值,只会对下次新创建的库、表有影响。
原先是什么样他还是那样
)