mysql數據超出範圍的處理
阿新 • • 發佈:2017-09-12
mysql sql_mode
MySQL默認情況下,當一個數據超出定義列的數據類型的範圍時,數據會以數據類型所充許的最大值存儲。
例:
1. 創建表
create table t1 ( `num` int not null);
2. 插入數據
insert into t1(`num`) value(2147483648);
[SQL] insert into t1(num) value(2147483648); 受影響的行: 1 時間: 0.003s
3. 查詢
select * from t1;
+------------+ | num | +------------+ | 2147483647 | +------------+ 1 row in set (0.00 sec)
這裏可以看到存在表裏的數據是2147483647, 而不是我們想看到的數值;這種情況下MySQL插入數據沒有報錯或警告。
在現實場景中,如果這個字段存是非常敏感的數字,比如銀行的存款,與金錢相關的數據,這就不是我們希望得到的結果。
在這種情況下,我們希望在插入或更新字段時,如果插入或更新的值超出定義的字段數據類型的範圍時,提出報錯,禁示修改數據,通過修改全局變量sq_mode為
STRICT_ALL_TABLES
實現。
在my.cnf或my.ini中添加sql_mode=STRICT_ALL_TABLES,重啟mysql_server即可。
例:
insert into t1(`num`) value(2147483648);
[SQL] insert into t1(`num`) value(2147483648); [Err] 1054 - Unknown column ‘num‘ in ‘field list‘
本文出自 “lang8027” 博客,請務必保留此出處http://lang8027.blog.51cto.com/9606148/1964527
mysql數據超出範圍的處理