这里写目录标题

  • 问题
  • 分析问题
  • 详解mysql数据类型
    • 整型(xxxint)
    • 浮点型(float和double)
    • 定点数(decimal)
    • 字符串(char,varchar,xxxtext)
    • 二进制数据(xxxBlob)
    • 日期时间类型(date,time,datetime,timestamp)
    • 数据类型的属性
    • 解决问题
  • 总结

问题

今天使用mybatis开发,在向manager表中添加数据时,遇到了这样的问题:

 SQL: insert into manager (name, mobile, franchiseeId, userId,roleCategory, status,createTime, updateTime) values (?, ?,?, ?,?, ?,?, ?)Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2147483647' for key 'PRIMARY';

分析问题

Duplicate entry '2147483647' for key 'PRIMARY'翻译成中文就是主键重复了

于是,查询数据表中是否存有id=2147483647的记录,发现存在这条记录。

id = 2147483647,为什么就无法插入数据呢?我们不得不去考虑mysql的数据类型。

详解mysql数据类型

整型(xxxint)

  • tinyint(m) 1个字节表示(-128~127)

  • smallint(m) 2个字节表示(-32768~32767)

  • mediumint(m) 3个字节表示(-8388608~8388607)

  • int(m) 4个字节表示(-2147483648~2147483647)

  • bigint(m) 8个字节表示(±9.22*10的18次方)

id = 2147483647正好达到了int(m)最大值,而我们数据表的id的字段类型正好是int类型,因而,无法继续写入数据了。

但我们的数据量不大,不至于会达到最大值,是不是数据库做了什么更改,在下文会继续分析。

浮点型(float和double)

  • float(m,d) 单精度浮点型,8位精度(4字节),m是十进制数字的总个数,d是小数点后面的数字个数

  • double(m,d) 双精度浮点型,16位精度(8字节)

参数m只影响显示效果,不影响精度,d却不同,会影响到精度。比如设一个字段定义

定点数(decimal)

decimal(m,d)定点类型浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

参数m是定点类型数字的最大个数(精度),范围为0~65,d小数点右侧数字的个数,范围为0~30,但不得超过m。

对定点数的计算能精确到65位数字。

字符串(char,varchar,xxxtext)

  • char(n) 固定长度的字符串,最多255个字符

  • varchar(n) 固定长度的字符串,最多65535个字符

  • tinytext 可变长度字符串,最多255个字符

  • text 可变长度字符串,最多65535个字符

  • mediumtext 可变长度字符串,最多2的24次方-1个字符

  • longtext 可变长度字符串,最多2的32次方-1个字符

二进制数据(xxxBlob)

XXXBLOB相对于xxxtext来说的。

他们的存储方式不同,xxxTEXT是以文本方式存储的,如果存储英文的话区分大小写,而xxxBlob是以二进制方式存储的,不区分大小写。

xxxBlob存储的数据只能整体读出。

xxxTEXT可以指定字符集,xxxblob不用指定字符集。

日期时间类型(date,time,datetime,timestamp)

  • date 日期’2008-12-2’

  • time 时间’12:25:36’

  • datetime 日期时间’2008-12-2 22:06:44’

  • timestamp 不固定

timestamp比较特殊,如果定义字段的类型为timestamp,这个字段的时间会在其他字段修改的时候自动刷新。所以这个数据类型的字段可以存放这条记录最后被修改的时间,而不是真正来存放时间。

数据类型的属性

  • NULL 数据列可包含NULL值

  • NOT NULL 数据列不允许包含NULL值

  • DEFAULT xxx 默认值,如果插入记录的时候没有指定值,将取这个默认值

  • PRIMARY KEY 主键

  • AUTO_INCREMENT 递增,如果插入记录的时候没有指定值,则在上一条记录的值上加1,仅适用于整数类型

  • UNSIGNED 无符号

  • CHARACTER SET name 指定一个字符集

解决问题

上文中也提到了id达到了最大值,但为什么会达到最大值呢?

于是,查询这个id的上条记录的id=400,但manager表是自动增加的,因而,这条记录应该是 id = 401

通过上面的分析,只能是MySQL的配置问题,有可能是 auto Increment = 2147483647,于是,去查看manager表的配置:

果然是配置的问题,可能其他研发人员误操作,修改auto increment的值,于是,把该值修改为401,auto increment ,实际上是随着表中的id的改变而自动改变的。**

总结

经过这个问题,学习了mysql的数据类型。

你学废了mysql的数据类型吗?

解决mysql插入数字都变成2147483647的方法 Duplicate entry ‘2147483647‘ for key ‘PRIMARY‘ 详解mysql的数据类型相关推荐

  1. MySql插入数据时错误Duplicate entry '131' for key 'PRIMARY'

    今天在进行开发的过程中,遇到MySQL数据库插入数据时抛出异常: Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViol ...

  2. 关于逆向工程,解决mysql数据库遇到的1406问题,ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

    先说逆向过程,先是在PowerDesginer这个软件上生成数据表,然后生成sql脚本, 生成sql脚本: 然后在命令行进行数据生成. 1.连接mysql数据库 2.use 数据库(其中一个空数据库) ...

  3. mysql报错:Duplicate entry ‘xx‘ for key ‘PRIMARY‘ 解决可行方案。已解决

    mysql报错:Duplicate entry 'xx' for key 'xxux1' 解决可行方案.已解决 web开发多次遇到Duplicate entry 'xx' for key 'PRIMA ...

  4. MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法

    在MySQL中执行加字段等操作时可能会报Duplicate entry 'xxx' for key 'PRIMARY'的错,例如: mysql> alter table test add aa ...

  5. 利用navicat向mysql数据库导入数据时出现1062 - Duplicate entry '0' for key 'PRIMARY'错误的解决办法

    1062 - Duplicate entry '0' for key 'PRIMARY',明明导入的数据值不一样,但错误提示主键已存在,不能插入.不知道为什么有些数据插入不成功,原因我也不知道. 解决 ...

  6. mysql #1062 –Duplicate entry '1' for key 'PRIMARY'

    把数据从一个机器上导到另外一个机器上,因此记录太多,刚开始没注意,超过了phpmyadmin的限制,提示出错了,我把文件手动的给分成一些小文件,可是再导就提示#1062 - Duplicate ent ...

  7. 【数据库-MySql】[Err] 1062 - Duplicate entry '1-1' for key 'PRIMARY'

    背景 在Mysql转存过程中使用以下SQL语句,出现Err 1062的报错. INSERT INTO dbbackup.tb1 SELECT* FROMtb1 主键或联合主键对应的数据已存在. [Er ...

  8. 使用Navicat插入数据时报错1062 - Duplicate entry ‘menu544073941‘ for key ‘PRIMARY‘

    -> 报错: 1062 - Duplicate entry 'menu544073941' for key 'PRIMARY' -> 原因:数据库表在设计时,没有设置id主键自增,而要插入 ...

  9. MySQL中出现Duplicate entry 'XXX' for key 'PRIMARY'解决方案

    首先我们用MySQL自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为"XXX"的那项,实际上我写的代码并没有重复也会弹出此 ...

最新文章

  1. 选型必看:RabbitMQ 七战 Kafka,差异立现
  2. 第二章 序列比对——Needleman-Wunsch全局比对
  3. ASP.NET Web API WebHost宿主环境中管道、路由
  4. MODE —— 输入一个数字,求从1加到该数的和(知识点:for循环嵌套while循环)
  5. asp.net服务器控件与html服务器控件的区别
  6. case....when ...多重判断
  7. Linux进程间通信二 System V 消息队列简介与示例
  8. Burp Suite安装配置
  9. Head First JSP---随笔八(传统标记)
  10. gpio能测Linux启动时间,linux – 如何自动测量新建图像的启动时间...
  11. nvinfer1::cudnn::Engine::deserialize()出错的原因
  12. 【AD】Altium Designer PCB文件的绘制(上篇:PCB基础和布局)
  13. 谷歌Chrome浏览器保存网页为PDF
  14. 利用SQL求中位数(已修复BUG)
  15. 08.15恒指/德指做单思路导图及晚盘前瞻
  16. 自动驾驶 4-5 自行车模型的横向动力学 Lateral Dynamics of Bicycle Model
  17. 【3分钟速读】那些你苦苦搜索的模板,是这么被捣腾出来的
  18. Xposed 模块编写
  19. 电子元器件品牌及其代理商
  20. JavaWeb—静态网页HTML

热门文章

  1. mac命令行配置代理服务器_如何在Mac上配置代理服务器
  2. 关于quotename的用法
  3. 2022广东省焊工(初级)考试题模拟考试题库及模拟考试
  4. BCrypt加密算法
  5. 制作网站的缩略logo标志
  6. 【高效开发工具系列】Windows 修改 host 文件
  7. ListView之多种类型Item
  8. C# List AddRange Concat Value cannot be null. (Parameter ‘collection‘)
  9. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.26日(2019省赛A组第4题)
  10. 使用桥接网络的jslinux