日期:2014-05-16  浏览次数:20678 次

Mysql int类型长度问题 这个问题让我狠匪夷所思
前言:mysql int类型(M)括号中填的数字是 显示宽度 而不是列的长度 (PS:网上看到的)

我数据库中  
int(10)作为主键列

当数据添加到 Duplicate entry '4770549' for key 'PRIMARY'

4770549 就添加不进去了

错误提示: org.hibernate.AssertionFailure: null id in com.zqkj.entity.StatExitModel entry (don't flush the Session after an exception occurs)


我一看org.hibernate.AssertionFailure 异常  

要么就是字段类型不匹配、要么是有关键字、要么是长度不够

我这程序跑三个月了 前两个我就排除了 那就剩下长度问题了

一共三个字段 一个主键 一个时间 一个UID UID是varchar我设置了255(hibernate建表默认的 我也没改) 

那就剩主键了 然后我把10改成20 就可以正常运行了 求大神指导 这是什么情况

------解决方案--------------------
主键当然不能重复添加了


简单说 就是(M)忽略吧 一点用没有 这个就是个显示长度的问题 存储长度是int 4字节
------解决方案--------------------
主键是自动增长不需要添加的,会报错的。
------解决方案--------------------
show create table 贴出来以供分析。

INT可以支持到 2147483647 哪怕是 INT(1) 也同样。
------解决方案--------------------
建议楼主同样做如下测试,应该不是INT字段长度的问题。感觉上应该在程序端出问题了。 你可以打开一般查询日志做跟踪,看到底程序提交到数据库的语句是什么。

引用mysql> CREATE TABLE `tb_statistic_exit` (
-> `id` int(20) NOT NULL AUTO_INCREMENT,
-> `uid` varchar(500) NOT NULL,
-> `visitTime` datetime DEFAULT NULL,
-> `onlineTime` varchar(500) DEFAULT NULL,
-> PRIMARY KEY (`id`),
-> KEY `idx_uid_id` (`uid`(333))
-> ) ENGINE=MyISAM AUTO_INCREMENT=4792763 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.11 sec)

mysql> insert into `tb_statistic_exit` (`uid`) values ('asd');
Query OK, 1 row affected (0.00 sec)

mysql> insert into `tb_statistic_exit` (`uid`) values ('asd1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into `tb_statistic_exit` (`uid`) values ('asd2');
Query OK, 1 row affected (0.00 sec)

mysql> select id,uid from `tb_statistic_exit`;
+---------+------+
| id | uid |
+---------+------+
| 4792763 | asd |
| 4792764 | asd1 |
| 4792765 | asd2 |
+---------+------+
3 rows in set (0.00 sec)

mysql>