1. 在dos窗口,insert 汉字 时,
data too long for column”错误
如下:
mysql> describe openaccount;
+-----------------------------+----------
---+
| Field | Type
ra |
+-----------------------------+----------
---+
| ID | int(11)
|
| SERIALID | char(20)
对serialid字段,char(20) ,插入20个汉字时,报错:data too long for column; 尝试只能插入1个汉字.
但通过写个java程序,插入发现可以插入20个汉字. 为什么?
经过查阅资料(见下 转载) ,知道了, 这是dos下连接数据库, 对中文的编码,有问题导致.
--> char(20) 可以插入20个字符(数字, 英文, 包括中文)
关于MySql5“data too long for column”问题的探解
(2007-05-02 16:37:54)
今天在windows的DOS窗口下运行mysql命令,insert语句中只要含有汉字数据就出现“data too long for column”错误 。
后来在网上查到一篇帖子 ( http://www.blogjava.net/sakis/archive/2006/07/14/58242.html ),内容如下:
关于MySql5的“data too long for column”错误
从MySql5中运行本地脚本创建数据库,当插入中文字段时发生“data too long for column”错误。上网一查,发现多字节用户大都碰到了这种情况。google搜索网上的解决方法大都是要将数据库的编码方式为GBK或UTF8,可我在安装MySql时就选择了UTF8格式。原来错误原因是本地的脚本文件不是UTF8编码的,用记事本或UltraEdit将编码转为UTF8后问题解决。再次强调,JSP页面,数据库联接接方式,数据库创建,…,都须一致使用UTF8编码!
BTW,MySql最近借着Web2.0的浪潮风头很劲啊,techn orati(好像这几天被GFW filter了),flickr,del.icio.us等一批网站都是用了MySql。MySql还专门在首页开了一大块来炫耀。
--------------------------------------------
按照他说的方法,通过source命令或者管道导入sql文件是没错了。但在Console/DOS窗口下运行insert语句带汉字还是会出现错误,为什么?经过一番测试,总结出这样的经验:
Console下调用程序发出的指令是通过一种编码格式编码之后发送出去的字符串,接收程序返回的信息同样也使用编码过的字符流。
例如我们要调用:
rename 1.txt 测试.txt
dos下把这行命令用某种编码方式编码成字符串,如果renmae命令接收到这个命令字符串,但错误的理解了这个命令参数的编码,或者console发送这个命令时使用了utf8编码,而renmae认为是gbk编码,则该命令会把文件重命名成乱码的名字。(因为中文windows下编码默认都是gbk,所以我们从来没遇到过这样的乱码问题。在dos窗口左上角右键-->属性,当前代码页: 936 (ANSI/OEM - 简体中文 GBK )验证DOS窗口是GBK编码发送字符)
但是,进入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编码去发送指令的。
当然,假设某个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
分享到:
相关推荐
导入数据的时候,mysql报错 ERROR 1406 : Data too long for column Data too long for column
MySQL 8 for Big Data 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
MySql.Data.dll 6.4.4 for .net 4.0
罗集比较全的数据库乱码问题的解决方案,,讲明了原因和解决方法
MySql.Data.dll 6.4.4 For .NET 2.0
mysql5.0乱码的解决实例:用代码方式实现乱码的解决! data too long for column........
提供了C#下的MySql操作 可以像操作Sqlserver一样的操作Mysql 有关具体操作细节 http://download.csdn.net/source/3555627
MySQl语法大全 MSQl在Dos下的操作语法
向mysql的表插件一个字段 类型为text时,或修改一个字段类型为text时,报出上面的错误。其实我对这个错误的原因理解也不是很深,给出一些我查到的解释吧 大意是数据表中有一个设定长度为64K的字段索引,当表中字段...
MySql.Data.dll For .Net .Net里面Mysql的链接操作库,赚分用啊,多谢大家!
介绍了mysql在dos窗口下的相关使用,每一步详细介绍,代码全 1.进入数据库 2.新建用户 3.建数据库(格式),建表(自增),插入数据(2种) 4,日期,表结构,数据库版本 5.存储过程 6.表的备份与恢复 7.数据库的备份与恢复
MySQL Connector/Net ...在项目中引用组件:MySql.Data.dll (记得复制到本地中选择为true / 或直接把MySql.Data.dll复制到debug文件夹下) 在代码中 using MySql.Data.MySqlClient; ......接下来这里就看你表演了。
MySql写入中文错误解决办法,对于导入中文, 数据老是报错"Data too long for column XX at row n
MySQL.Data.EntityFrameworkCore,MySql.Data.EntityFramework,MySql.Data
关于常用的dos下mysql操作的命令,很不错的!值得一看!
用于mysql8.0版本的MySql.Data.dll类库,直接引用使用
CSharp操作Mysql数据库需要的动态库,包含多个版本的MySql.Data.dll下载。
MySql.Data.dll 6.4.4 for .net 2.0