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的参数属性值,只会对下次新创建的库、表有影响。

原先是什么样他还是那样

)

 

 

 

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值