1. 程式人生 > >mysql數據超出範圍的處理

mysql數據超出範圍的處理

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_modeSTRICT_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數據超出範圍的處理