java-mysql异常<Data truncation: Data too long for column 'name ' at row 1>讨论

  mysql5.0+myeclipse4.1+tomcat5.0   全部使用默认编码方式
    1:插如数据到mysql中:
          在页面上加入本页的编码方式  
        <%@   page   contentType= "text/html;charset=gb2312 "   %>
          把你要插入的中文文字由gb2312转变为iso-8859
        title   =   new   String(title.getBytes( "GB2312 "),   "ISO-8859-1 ");
        ***注意此页面千万别在数据库的URL后面加任何编码方式*****
        conn   =   java.sql.DriverManager.getConnection         ( "jdbc:mysql://localhost/zqswork ", "root ", "root ");
   
      2:从mysql中读出数据到页面:
          依然在页面上加如编码方式
    <%@   page   contentType= "text/html;charset=gb2312 "   %>  
          把你要读出的中文由iso-8859转变为gb2312
    <%username   =   new   String(username.getBytes( "ISO-8859-1 "),   "gb2312 ");%>
      ****注意此页面一定要在数据库url处加入编码方式(与上面相反)******

        conn   =   Java.sql.DriverManager.getConnection( "jdbc:MySQL://localhost/zqswork?useUnicode=true&characterEncoding=gb2312 ", "root ", "root "); 



这个问题请注意3点:
1。创建数据库的时候:CREATE   DATABASE   `database`
                                                CHARACTER   SET   'utf8 '
                                                  COLLATE   'utf8_general_ci ';
2.建表的时候                     CREATE   TABLE   `database_user`   (
                                                `ID`   varchar(40)   NOT   NULL   default   ' ',
                                                `UserID`   varchar(40)   NOT   NULL   default   ' ',
                                            )   ENGINE=InnoDB   DEFAULT   CHARSET=utf8;

3.设置URL的时候               jdbc:mysql://localhost:3306/database?seUnicode=true&characterEncoding=UTF-8

这3个设置好了,基本就不会出问题了
 
是字符集问题引起的,用show full fields from + 表名就可以看出你的列的编码格式
把它改成GBK或者GB2312、uTF-8。
如果还不行的话,把你表的编码格式也改成上面的编码格式,我是两个都改了
就OK了!


要先用重启mysql
在命令提示符下用:
net stop mysql
net start mysql


没错 是编码的问题 很诡异 我一张表两个字段类型一样的 一个OK一个却data too long,后来我导出了SQL,改了一下
-- ----------------------------
-- Table structure for cities
-- ----------------------------
CREATE TABLE `cities` (
。。。。。。
。。。。。
) ENGINE=InnoDB DEFAULT CHARSET=utf8;//这改成UTF8就行了



本人也遇到这样的问题,花了好长时间解决的,总结了一下,希望对各位有用
mySql错误:Data truncation: Data too long for column :这个问题是字符集编码格式问题,修改mysql 安装文件下的my.ini 文件,[mysql] 下面default-character-set=UTF8 修改成utf-8或者gbk,此文件中还有一处要改的 # created and no character set is define 下面default-character-set=UTF8 然后在的data目录下找到相应数据库文件 找到db.opt 文件 default-character-set=UTF8 default-collation=UTF8_swedish_ci 这2行文字都要改,这些都改了要是还不行的话,再查看你表的编码和表中字段的编码格式:在表上点击右键——表讯息——DDL 可以看到表和字段的编码格式,要是跟你配置文件中的不一致的话修改就OK了,修改方法:在表上点击右键——设计表——选项——字符集 ,然后点击你表中的每个字符串字段,查看下面的字符集编码是否一致,所有工作都做了肯定就好了。




例如将所有的编码都设置成utf8,jsp的contentType= "text/html;charset=utf-8 "
修改数据库默认编码ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
修改表的编码:ALTER TABLE `category` DEFAULT ……



汉字乱码问题:
(1)修改 my.ini 设置default-character-set=gbk(注意,有2处) 
(2)修改data目录中相应数据库目录下的db.opt配置文件 default-character-set=gbk default-collation=gbk_chinese_ci 
(3) 生成库、表、字段时,不要隐含为 latin.
  检查,如果是latin, 则要改为 gbk

这样在3个层次注意字符集的设置问题。应该没有问题了。


我遇到的问题是在程序中插入中文字符可以,但是在数据库中查看时,会不正常显示!
但是在mysql doc中使用sql插入中文就会报data too long的错误提示,我使用的是utf8编码!
在插入数据之前我把编码都统一了,都是utf8。
1.连接数据的url为
jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf8
2.安装mysql5.0时使用的是utf8编码格式
3.更改数据库中相应属性编码为utf8
先查看一下各个变量的编码:show variables like 'character_set_%';
通过该语句设置编码set names utf8;//这个基本会更改大部分,可能会剩下一个,那个无所谓!
但是,此时,如果在mysql doc中使用sql语句插入中文的话,还是会报data too long的错误,
这是因为在mysql的控制台属性中,默认代码页那项中有两种编码,一种是简体中文GBK,一种是
OEM美国,我们一般默认是GBk,所以这就造成了在doc下插入会报错!
我只能试着用程序插入数据了,不过我看你使用的是GBK,所以应该可以,你只需要把编码都统一一下,
除了上面的使用GBK外,在创建数据库,创建表的时候都加上编码,这样应该可以。
4.create database dbname default character set utf8;
5.create table tabname(.....) ENGINE=InnoDB default charset=utf8;
试一下吧,希望对你有用,我再看看,还有没有其他的办法!


:(1)修改 C:\Developer\MySQL5.0\my.ini(MySQL Server Instance Configuration 文件) 
设置default-character-set=gbk(注意,有2处) 
(2)修改data目录中相应数据库目录下的db.opt配置文件 
default-character-set=gbk 
default-collation=gbk_chinese_ci 
重起mysql,就ok了.


其实最终还都是编码的问题,主要的问题出在以下几点:
1.数据库的编码格式
2.所用语言的编码格式
3.如果是网页提交或接收的编码格式
以上3点的编码格式都一致的情况下,就不会出现乱码了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值