关于MySQL的整型数据的内存溢出问题的应对方法_Mysql

今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题 。经过很久的排查是数据类型溢出了(发生问题的版本是MySQL 5.1)。后来通过给朋友那边把MySQL 5.1升级到MySQL 5.5去解决这个问题。 这也让我有兴趣去了解一下MySQL不同版本数据类型溢出的处理机制。

先看一下MySQL支持的整型数及大小,存储空间:

另外请记着mysql的数据处理会转成bigint处理,所以这里就用bigint几个测试:

SELECTCAST(0ASUNSIGNED)-1;

SELECT9223372036854775807+1;

MySQL 5.1 下:

mysql>SELECTCAST(0ASUNSIGNED)-1;
+-------------------------+|CAST(0ASUNSIGNED)-1|+-------------------------+|18446744073709551615|+-------------------------+1ROWINSET(0.01 sec)

mysql>SELECT9223372036854775807+1;
+-------------------------+|9223372036854775807+1|+-------------------------+|-9223372036854775808|+-------------------------+1ROWINSET(0.01 sec)

MySQL 5.5, 5.6, 5.7下:

mysql>SELECTCAST(0ASUNSIGNED)-1;
ERROR 1690(22003): BIGINTUNSIGNEDVALUEISOUTOF range IN'(cast(0 as unsigned) - 1)'
mysql>
mysql>
mysql>
mysql>SELECT9223372036854775807+1;
ERROR 1690(22003): BIGINTVALUEISOUTOF range IN'(9223372036854775807 + 1)'

所在处理这类数据是一定要小心溢出(如早期有做弊冲Q币就是利用这个方法处理)

这个问题有可能会出现积分消息,积分相加, 或是一些钱相关的业务中出现, 主库5.1 ,从库MySQL 5.5情况也会出现不同步的问题。
建议:这类业务系统尽可能的升级到MySQL 5.5后版本 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql
mysql 内存溢出、mysql 查询内存溢出、mysql 数据库内存溢出、mysql导致内存溢出、整型溢出,以便于您获取更多的相关知识。

时间: 2024-09-26 07:54:12

关于MySQL的整型数据的内存溢出问题的应对方法_Mysql的相关文章

android的BitmapFactory.Options使用及内存溢出OOM的优化方法

android中BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起 怎样获取图片的大小?首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了.新问题又来了,在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题.怎么避免它呢?这就用到了我们上面提到的Bi

Java Mysql blob 存取大文件时内存溢出如何解决?

问题描述 今天模拟一些数据,需要将一些大文件我用的是755M(可以更大)存入到Mysql的一个longblob字段中.我使用了pstmt.setBinaryStream(2, fis, f.length());的方式,但总是抛出异常.貌似Mysql 的JDBC总是先将stream中的数据读成byte[]然后再往数据库中存,所以总是内存溢出,不知哪位高人可有解决方案?!我的代码: ApplicationContext contxt = new ClassPathXmlApplicationCont

有关tomcat内存溢出的完美解决方法_java

tomcat内存溢出设置JAVA_OPTS 答案1 设置Tomcat启动的初始内存 其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可 进行设置 三.实例,以下给出1G内存环境下java jvm 的参数设置参考: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -D

Mysql挂掉后无法重启报pid文件丢失的解决方法_Mysql

阿里云单核2G的配置挂着两个企业网站,访问量一般.最近每天几乎都会出现网站打不开显示数据库链接失败的问题. 多方寻求原因发现,mysql的pid文件缺失,并无法重启自建,后来也看了其他帖子说关闭日志什么的未果,查看系统日志发现,是因为内存满了导致mysql进程被杀,然后就一直挂起状态. Sep 25 11:33:48 iZ28jcqqr7lZ kernel: Out of memory: Kill process 23201 (mysqld) score 53 or sacrifice chil

关于PHP内存溢出问题的解决方法

一.内存溢出解决方案在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案.还是用例子来说明这个问题,如下: 假定日志中存放的记录数为500000条,那么解决方案如下: 复制代码 代码如下: ini_set('memory_limit','64M'); //重置php可以使用的内存大小为64M,一般在远程主机上是不能修改php.ini文件的,只能通过程序设置.注:在safe_mode(安全模式)下,ini_set失效 set_time_limit(600);//设置超

Bbitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法

android 中用bitmap 时很容易内存溢出,报如下错误: Java代码   Java.lang.OutOfMemoryError : bitmap size exceeds VM budget      ● 主要是加上这段: Java代码   BitmapFactory.Options options = new BitmapFactory.Options();                    options.inSampleSize = 2;      ● eg1:(通过Uri取

java中三种常见内存溢出错误的处理方法(good)

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

mysql登录报错提示:ERROR 1045 (28000)的解决方法_Mysql

本文分析了mysql登录报错提示:ERROR 1045 (28000)的解决方法.分享给大家供大家参考,具体如下: 一.问题: 公司linux系统的mysql数据库root用户设置过密码,但常常用命令'mysql -u root -p'登录报错,有时又能登录.登录报错信息为: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localho

MySQL学习笔记之创建、删除、修改表的方法_Mysql

本文实例讲述了MySQL学习笔记之创建.删除.修改表的方法.分享给大家供大家参考,具体如下: 创建表: create table users( id int, name varchar(64), sex bit(1), birthday date, Entry_date date, job varchar(32), salary float, resume text ); 1 添加列: alter table 表名 add 列名 数据类型 alter table users add image