error 1406:data too long for column 'name' at row 1

今天在windows的DOS窗口下运行mysql命令,insert语句中只要含有汉字数据就出现“data too long for column”错误 。javascript

后来在网上查到一篇帖子 ( http://www.blogjava.net/sakis/archive/2006/07/14/58242.html),内容以下:html

关于MySql5的“data too long for column”错误java

从MySql5中运行本地脚本建立数据库,当插入中文字段时发生“data too long for column”错误。上网一查,发现多字节用户大都碰到了这种状况。google搜索网上的解决方法大都是要将数据库的编码方式为GBK或UTF8,可我在安装MySql时就选择了UTF8格式。原来错误缘由是本地的脚本文件不是UTF8编码的,用记事本或UltraEdit将编码转为UTF8后问题解决。再次强调,JSP页面,数据库联接接方式,数据库建立,…,都须一导致用UTF8编码!mysql

--------------------------------------------sql

按照他说的方法,经过source命令或者管道导入sql文件是没错了。但在Console/DOS窗口下运行insert语句带汉字仍是会出现错误,为何?通过一番测试,总结出这样的经验:
Console下调用程序发出的指令是经过一种编码格式编码以后发送出去的字符串,接收程序返回的信息一样也使用编码过的字符流。数据库

例如咱们要调用:windows

rename 1.txt 测试.txtjsp

dos下把这行命令用某种编码方式编码成字符串,若是renmae命令接收到这个命令字符串,但错误的理解了这个命令参数的编码,或者console发送这个命令时使用了utf8编码,而renmae认为是gbk编码,则该命令会把文件重命名成乱码的名字。(由于中文windows下编码默认都是gbk,因此咱们历来没遇到过这样的乱码问题。在dos窗口左上角右键-->属性,当前代码页: 936 (ANSI/OEM - 简体中文 GBK )验证DOS窗口是GBK编码发送字符)ide

可是,进入mysql命令以后,mysql命令可并不必定知道你发送的指令是GBK编码的,它可能认为你发送的指令是utf8编码,或者跟数据库编码一致的编码,或者跟某个全局变量一致的编码的指令字符串( mysql默认用什么编码接收指令,我没有研究清楚,请看官补充 )。因此这时候为了不mysql误解你的指令编码,须要在调用mysql的时候加上--default-character-set=gbk 的参数。即 使用 mysql -uroot -p --default-character-set=gbk 登陆便可。注意,不要由于你的数据库是utf8编码就使用mysql -uroot -p --default-character-set=utf8去登陆。咱们这里说的是dos中发出的指令字符串的编码,dos窗口是不会用utf8编码去发送指令的。post

固然,假设某个console发出的指令是经过utf8字符编码的,是否是应该用
mysql -uroot -p --default-character-set=utf8 ?没有试过,但分析应如此。

为何用MYSQL-Front/SQLyog这样的GUI程序执行一样的sql就没有问题呢?在mysql-front/SQLyog登陆时,就能够指定链接字符集,我猜测,登陆进去以后在SQL编辑框中发送的SQL指令也许就是经过这个字符集编码的,若是跟数据库一致的话,固然没有问题了。

附上一个简单的sql测试代码:

#drop database test_001;
create database test_001 default character set utf8 collate utf8_general_ci;
use test_001;

create table config (
  id                   smallint       not null default '1' ,     
  name                 varchar(64)    not null ,                 
  descr                varchar(64)    ,                 
  primary key(id) 
);
先建表,而后insert。
use test_001;
insert into config (id, name, descr )  values ( '1', '中文名字', '描述' );

当 mysql命令不使用 --default-character-set 参数,出现
ERROR 1406 (22001): Data too long for column 'name' at row 1
的错误
若是使用mysql命令时加上--default-character-set=gbk 的参数,则错误排除!

上面测试是在windowsXP中文版,mysql 5.0.27-community-nt
status出来的信息是:
mysql  Ver 14.12 Distrib 5.0.27, for Win32 (ia32)
Connection id:          19
Current database:       test_001
Current user:          root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.0.27-community-nt
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 7 hours 41 min 27 sec


===========
其实最简单的测试方式就是先修改my.ini文件中的-default-character-set = gb2312或utf8,重启mysql再输入数据,若是不行,再考虑以上方法

出处:http://www.cnblogs.com/ovliverlin/archive/2007/11/26/972549.html

我感受出现这个问题的缘由是:sql的编码是UTF-8的,而插入时的汉字的编码是多是GBK,因此插不进去,个人解决方法是经过程序插中文,由于在程序中插入时的编码同mysql是一致的,还有一种解决方法(我感受):把mysql的编码设置成GBK就应该没问题~ 感受上面我说比我说的要细致要清楚,因此转载留着之后查阅

相关文章
相关标签/搜索