程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL的整型數據的內存溢出成績的應對辦法

關於MySQL的整型數據的內存溢出成績的應對辦法

編輯:MySQL綜合教程

關於MySQL的整型數據的內存溢出成績的應對辦法。本站提示廣大學習愛好者:(關於MySQL的整型數據的內存溢出成績的應對辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是關於MySQL的整型數據的內存溢出成績的應對辦法正文


明天接到一個同伙德律風說是覺的數據庫被他人更改了,湧現數據纰謬的成績 。經由良久的排查是數據類型溢出了(產生成績的版本是MySQL 5.1)。後來經由過程給同伙那裡把MySQL 5.1進級到MySQL 5.5去處理這個成績。 這也讓我有興致去懂得一下MySQL分歧版本數據類型溢出的處置機制。

先看一下MySQL支撐的整型數及年夜小,存儲空間:

201559103624773.jpg (576×316)

別的請記住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後版本 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved