今天系统升级,开发、测试说本地环境、测试环境都没有问题,都用ssh client升的,演示环境报错了Data too long for column。

仔细检查了下,表字符集都是utf-8,目测长度肯定没超过。仔细查了下,问题出在character_set_client上。如下所示:

mysql> show create table t_char;
+--------+-----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+-----------------------------------------------------------------------------------------------------------------------------+
| t_char | CREATE TABLE `t_char` (
`id` int(11) DEFAULT NULL,
`name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+------------------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Percona-Server-5.6.30-rel76.3-Linux.x86_64.ssl101/share/charsets/ |
+--------------------------+------------------------------------------------------------------------------+
8 rows in set (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试');--32个字符,肯定没有问题。
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试');--34,必然的。
ERROR 1406 (22001): Data too long for column 'name' at row 1

mysql> set character_set_client=gbk;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试1');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试');--20个字符,
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测试'); --22个字符
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测1'); --20个中文,一个数字
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测11'); --20个中文,两个数字
ERROR 1406 (22001): Data too long for column 'name' at row 1

mysql> set character_set_client=latin1;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3188579
Current database: test

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测试测试测试测试测试测1');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t_char values(1,'测试测试测试测试测试');--10个字符
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_char values(1,'测试测试测试测试测试测'); --11个字符
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t_char values(1,'aaaaaaaaaa');
Query OK, 1 row affected (0.01 sec)

==========================

再看表时gbk字符的情况:

mysql> create table test_g(id int,name varchar(32)) charset=gbk;

mysql> set character_set_client=gbk;
Query OK, 0 rows affected (0.06 sec)

mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试');--30个字符
ERROR 1406 (22001): Data too long for column 'name' at row 1

mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测');
ERROR 1366 (HY000): Incorrect string value: '\x8B' for column 'name' at row 1

mysql> insert into test_g values(1,'测试测试测试测试');
Query OK, 1 row affected (0.30 sec)

mysql> select * from test_g;
+------+--------------------------------------+
| id | name |
+------+--------------------------------------+
| 1 | 娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯 |
+------+--------------------------------------+
1 row in set (0.51 sec)

mysql> insert into test_g values(1,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test_g values(1,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test_g values(1,'测试测试测试测试');
Query OK, 1 row affected (0.06 sec)

mysql> select * from test_g;
+------+--------------------------------------+
| id | name |
+------+--------------------------------------+
| 1 | 娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯 |
| 1 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 1 | 测试测试测试测试 |
+------+--------------------------------------+
3 rows in set (0.00 sec)

mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测');
Query OK, 1 row affected (0.39 sec)

mysql> select * from g;
ERROR 1146 (42S02): Table 'test.g' doesn't exist
mysql> select * from test_g;
+------+-----------------------------------------------------+
| id | name |
+------+-----------------------------------------------------+
| 1 | 娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯 |
| 1 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 1 | 测试测试测试测试 |
| 1 | 测试测试测试测试测试测试测试测试测 |
+------+-----------------------------------------------------+
4 rows in set (0.09 sec)

mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试');  --32个字符
Query OK, 1 row affected (0.00 sec)

mysql> insert into test_g values(1,'测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测'); --33个字符
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> select * from test_g;
+------+--------------------------------------------------------------------------------------------------+
| id | name |
+------+--------------------------------------------------------------------------------------------------+
| 1 | 娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯 |
| 1 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 1 | 测试测试测试测试 |
| 1 | 测试测试测试测试测试测试测试测试测 |
| 1 | 测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试 |
+------+--------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

实际结果比较怪异,不管建表用的是gbk还是utf8,insert时,Mysql对于客户端连接的字符集好像只有utf-8是正常识别的,gbk好像总是有问题。数据库gbk/客户端gbk也进行了编码转化导致乱码,好怪异的行为。

mysql乱码以及Data too long for column全解(最完整实用版)的更多相关文章

  1. mySql | Error: ER_DATA_TOO_LONG: Data too long for column 'base_info' at row 1

    问题描述:执行insert语句报以下错误 原因:数据库表,该字段在设计的时候长度过小,新插入的数据过长,会提示以上错误! 解决办法:修改表中该字段的长度限定.

  2. MySQL插入中文时出现ERROR 1406 (22001): Data too long for column 'name' at row 1 (转)

    使用命令行方式登陆到MySQL服务器, 建立一个数据库,数据库编码设为UTF-8.此时,如果直接在命令行窗口使用insert语句插入中文,就遇到类似 ERROR 1406 (22001): Data ...

  3. sql点滴37—mysql中的错误Data too long for column '' at row 1

    原文:sql点滴37-mysql中的错误Data too long for column '' at row 1   1.MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQ ...

  4. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' a

    1.错误描述 org.hibernate.exception.DataException: could not execute statement at org.hibernate.exception ...

  5. mysql修改字段长度及pymysql.err.DataError: (1406, "Data too long for column 'name' at row 1")错误

    文章链接:修改字段:https://blog.csdn.net/xiejunna/article/details/78580682 错误分析:https://blog.csdn.net/qq_4214 ...

  6. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'img' at row 1故障

    Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'img' at ro ...

  7. 数据库报错com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ua' at row 1

    记一次报错记录,成长路上的点滴 明明使用浏览器或者微信开发工具调试接口没有问题,但是在真机测试时候就出问题了.(((¬_¬)) 500服务器内部错误,要死的节奏啊 登陆tomcat服务器 使用命令ta ...

  8. com.mysql.jdbc.MysqlDataTruncation:Data Truncation:Data too long for column '字段name' at row 1

    1.问题描述: 在mysql插入数据的时候报错:Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long fo ...

  9. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1...

    之前项目一直好好的,之后电脑重装系统,数据库重新安装了一个5.6版本的,项目jar包丢失了,之后就又重新找了一些jar包倒入,结果运行报错: Caused by: com.mysql.jdbc.Mys ...

随机推荐

  1. 8个经典HTML5 3D动画赏析

    HTML5技术已经越来越被我们所接受,特别是一些3D的动画特效.本文介绍的8个HTML5 3D动画并没有特别华丽的界面,但是比较实用,涉及到3D图片.3D图表.3D按钮等方面,一起来看看. 1.HTM ...

  2. CSS-JQUERY笔记

    Ready $(document).ready(function(){ }) Input_div_span Input-长度限制 <input maxLength="2"&g ...

  3. CentOS 6.5 Python 2.6.6+Flask 用wsgi方式部署在Apache 2.2.15下

    1,安装wsgi Apache模块 easy_install mod_wsgi 2,添加/etc/httpd/conf.d/wsgi.conf LoadModule wsgi_module modul ...

  4. Python Flask UnicodeDecodeError 编码错误解决

    折腾Python做快速Web开发.最后定下来用Flask,相对教程全面. utf8编码上遇到问题,所有文件已经是utf8编码保存,加载css.js等静态文件,如果用GBK编码就正常:用utf8就报Un ...

  5. ODAC(V9.5.15) 学习笔记(十七)主从模式

    主从模式(Master/Detail mode)是指建立主表和从表关系的多个数据集集合模式. 1. 关系设置 要设置主从模式,必须有一个主表数据集(TDataSet)和一个从表数据集(TDataSet ...

  6. Bulk Insert的用法 .

    /******* 导出到excel */EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S&quo ...

  7. [转]MySQL与MongoDB的操作对比

    MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...

  8. Cannot find SS.INI file for user *** 解决方法

    昨天还用的好好的VSS今天早上一来就提示: Cannot find SS.INI file for user *** 度娘了一下,好像都是说的: 1,vss\users\***\  下无文件SS.IN ...

  9. MySQL server has gone away 问题的解决方法

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 造成这样的原因一般是s ...

  10. web.config中httpRunTime的属性

    配置httpRuntime也可以让FileUpload上传更大的文件,不过设置太大了会因用户将大量文件传递到该服务器而导致的拒绝服务攻击(属性有说明) <httpRuntime> < ...