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.。

Linux中mysql5.7修改character_ set_ database为utf8_第1张图片

个人感觉这里的character_ set_ database与默认项 、 库 、表都有所关联。

情况如下:

 

1、修改完my.cnf配置重启

Linux中mysql5.7修改character_ set_ database为utf8_第2张图片

2、 登录,查看character 属性,此时是utf8

Linux中mysql5.7修改character_ set_ database为utf8_第3张图片

3、创建表D ,随后查看表D属性,发现是latin1  !?

Linux中mysql5.7修改character_ set_ database为utf8_第4张图片

4、再次查看character属性,md 怎么变回latin1了

Linux中mysql5.7修改character_ set_ database为utf8_第5张图片

在这里就不是很理解为什么原先的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的参数属性值,只会对下次新创建的库、表有影响。

原先是什么样他还是那样

)

 

 

 

你可能感兴趣的:(运维,linux自学)