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字段的字符集定义就消失了,因为他和表的字符集是统一的,就不用显示了。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章