MySQL5.6 插入中文字段出错的解决办法

最近学习mysql数据库,安装了MySQL5.6,开始练习,在表格中插入中文字段时提示插入字符串非法。

花了一天的时间才终于找到原因并解决。得出的结论是:对主要用的字符集,我们一开始就要设置好这些个环境变量,将减少很多麻烦事情的发生。

分析:

1、MySQL5.6对字符集的定义太分散和灵活,分为服务器、客户端、数据库、表、字段,都可以单独指定字符集;

2、在5个层面上任何一个层面的设置,只能在下层板块新建的时候才能自然继承;比如服务器端为utf8字符集,建立数据库的时候只要不指定,就会自然继承采用utf8;

3、由于各个层面独立,服务器层面的改变在系统重启后并不会将已有的客户端、数据库、表和字段的字符集(比如gbk)强制到新的字符集(比如utf8)设定;如果要实现各个层面的统一,我们需要手工去完成整个链路的统一。

4、在以命令行运行的模式下(练习的时候通常是这样子),还有确定我们的操作系统采用的是什么字符集。在win7的cmd窗口,可以点击左上角的图标,在下拉框的属性菜单页,看到当前代码页,我的系统是用的GBK字符集,这点很重要,数据库系统使用的字符集全部要改为gbk,否则总是报错。

解决步骤(以win7下MySQL5.6为例,设置为gbk字符集)

1、打开数据库数据目录(这个目录是隐藏的)C:\ProgramData\MySQL\MySQL Server 5.6\my.ini文件;找到并修改如下

[mysql]
default-character-set=gbk

[mysqld]

character_set_server = gbk

文件保存后重启MySQL服务(先停止再开启,停止服务前要退出MySQL登录状态,回到系统命令提示符(如C:\>)的命令状态,停止服务的命令是net stop mysql56,启动的命令是net start mysql56)。

2、用mysql -uroot -p命令登录服务器

3、查看数据库系统的字符集:show variables like '%character%';可以看到除了“-system”和“-filesystem”两项外,都已经改为gbk了,这个就可以了。

4、启用我们要的数据库,用命令 use test1;然后查看数据库的缺省字符集 show create database test1;得到以下结果:

如果不是我们想要的,那就用:alter database test1 default character set gbk;改过来。

5、用show create table ts1;命令查看其默认的字符集;

如不是gbk,就用alter table ts1  default character set gbk;

6、同时可以看到name字段的字符集是utf8,也要改过来,否则做插入命令会显示错误:

因此要把name字段的字符集也改为gbk;使用命令alter table ts1 modify name varchar(20) character set gbk;

再用show create table ts1查看时name字段的字符集定义就消失了,因为他和表的字符集是统一的,就不用显示了。

再次插入数据,一切正常啦。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值