今天在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

转载于:https://www.cnblogs.com/chenjianhong/archive/2012/08/14/4145007.html

关于MySql5“data too long for column”问题的探解相关推荐

  1. mysql data to long_mysql 当插入中文字段时发生“data too long for column”错误

    从MySql5中运行本地脚本创建数据库,当插入中文字段时发生"data too long for column"错误.上网一查,发现多字节用户大都碰到了这种情况.google搜索网 ...

  2. mysql data too long for column xxx解决方案

    最近导入数据的时候,总是报错:java.sql.SQLException: Data truncation: Data too long for column '***' at row 1 Query ...

  3. 【mysql报错】Data truncation: Data too long for column ‘XXX‘ at row 1

    报错:.MysqlDataTruncation: Data truncation: Data too long for column 1.可能 数据库中的字符集的编码与写代码的页面的编码不相符合:(一 ...

  4. spring boot中data truncation data too long for column问题

    为什么80%的码农都做不了架构师?>>>    问题 根据报错可知,就是之前在数据库中定义的字段太短了,存不下新的数据 解决 @Column(length = 3000)privat ...

  5. Data truncation: Data truncated for column/Data too long for column

    数据截断:数据太长针对某列! Data truncation: Data too long for column 'dcontent' at row 1.我检查了以下.发现我插入到文本框里的表格的长度 ...

  6. 解决:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘ip‘ at row 1

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 报错: SQL []; Data truncation: Data too long for ...

  7. Extra Data after Last Expected Column:hawq建外表load数据报错

    背景:使用sqoop import 才oracle抽数据入HDFS后,通过pxf建立hawq外表,查询数据报错 解决思路:1.从报错上看应该是数据源分割后字段数比目标表字段多,且pgadmin3里报错 ...

  8. 报错,o.h.engine.jdbc.spi.SqlExceptionHelper : Data truncation: Data too long for column ‘verify_msg‘

    1.问题 2020-11-28 12:07:20.397  INFO 16308 --- [io-13000-exec-8] c.y.a.s.dayProcess.DayProcessService ...

  9. pyculiarity解决报错ValueError: data must be a 2 column data.frame, with thefirst column...

    解决方法 报错全称为:ValueError: data must be a 2 column data.frame, with thefirst column being a set of times ...

最新文章

  1. sentinel限流_微服务架构进阶:Sentinel实现服务限流、熔断与降级
  2. JAVA构造方法,继承关系和SUPER关键字
  3. HTML5中figure标签使用实例
  4. linux shell 编程 12 重定向
  5. SAP上线前数据重置方式总结
  6. flink读写hive-代码方式
  7. 实例解读Docker Swarm
  8. symbian VC环境配置及其helloword详解
  9. android ios 在线图标生成器
  10. 日文輸入法学习和日文键盘图
  11. 开机 服务 自动 bat regedi_android实现通话自动录音服务_Android
  12. ppt打不开服务器上的文件,PPT文件打不开的原因及解决方法
  13. 欲善其事,先利其器——青龙面板依赖安装教程
  14. 团购网站出路 艰难转型
  15. SAP中内部订单状态导致不能收货处理实例
  16. Python 抓取微信公众号账号信息
  17. 例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals 1990 UVa207)
  18. android智能云电视,率先升级Android4.0 TCL3D智能云电视独领技术风潮
  19. web前端-国际化-自动翻译(免费)
  20. 服务器怎么当虚拟主机,服务器怎么做虚拟主机

热门文章

  1. WF4.0 基础篇 (六) 数据的传递 Arguments 参数
  2. 关于C/C++中的几个关键字(C基础)
  3. html让文本框左剧中对齐_Python—Text:功能强大的文本框
  4. java基础输入_java基础之标准输入
  5. vue 前端设置允许跨域_[web]记一次sanic+vue跨域问题
  6. python装饰器详解51-python装饰器使用实例详解
  7. 前端系统学习篇之HTML
  8. 【跨语言通信】你还在为了JAVA调用C而苦恼吗
  9. vit-pytorch
  10. 5-6pooling层