| 您的当前位置:首页 --> MYSQL教程 --> MySQL整型数据溢出的解决方法 |
| MYSQL教程 MySQL整型数据溢出的解决方法 |
| 浏览次数:1076 关键词 ( ) |
| 查看使用该CPU的产品 查看CPU天梯 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CPU型号:MySQL整型数据溢出的解决方法 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 主频:Ghz | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 睿频:Ghz | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 核心数:个 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 不支持超核心 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 制作工艺: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 插槽类型: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 功耗:0W | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| L3缓存:0MB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 支持最大内存: 0GB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CPU详细参数 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题 。经过很久的排查是数据类型溢出了(发生问题的版本是MySQL 5.1)。后来通过给朋友那边把MySQL 5.1升级到MySQL 5.5去解决这个问题。 这也让我有兴趣去了解一下MySQL不同版本数据类型溢出的处理机制。 先看一下MySQL支持的整型数及大小,存储空间:
另外请记着mysql的数据处理会转成bigint处理,所以这里就用bigint几个测试: 复制代码 代码如下: SELECT CAST(0 AS UNSIGNED) - 1; SELECT 9223372036854775807 + 1; MySQL 5.1 下: 复制代码 代码如下: mysql> SELECT CAST(0 AS UNSIGNED) - 1; +-------------------------+ | CAST(0 AS UNSIGNED) - 1 | +-------------------------+ | 18446744073709551615 | +-------------------------+ 1 row in set (0.01 sec) mysql> SELECT 9223372036854775807 + 1; MySQL 5.5, 5.6, 5.7下: 复制代码 代码如下: mysql> SELECT CAST(0 AS UNSIGNED) - 1; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)' mysql> mysql> mysql> mysql> SELECT 9223372036854775807 + 1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)' 所在处理这类数据是一定要小心溢出(如早期有做弊冲Q币就是利用这个方法处理) 这个问题有可能会出现积分消息,积分相加, 或是一些钱相关的业务中出现, 主库5.1 ,从库MySQL 5.5情况也会出现不同步的问题。 更多详情参考: http://dev.mysql.com/doc/refman/5.7/en/out-of-range-and-overflow.html |
| 下一个产品 SQL计算timestamp的差值的方法 上一个产品 MySQL skip-character-set-client-handshake导致的一个字符集问题 |