MySQL 如何處理超出範圍的數值?


MySQL 對超出列資料型別允許範圍的數值的處理方式取決於 SQL 模式,具體如下:

(A) 啟用嚴格 SQL 模式 - 當啟用嚴格 SQL 模式時,MySQL 會在輸入超出範圍的值時返回錯誤。在這種情況下,部分或全部值的插入將失敗。

例如,我們建立了一個表,其中兩列的資料型別分別為 TINYINT 和 UNSIGNED TINYINT。

mysql> Create table counting(Range1 Tinyint, Range2 Tinyint Unsigned);
Query OK, 0 rows affected (0.14 sec)

現在,使用以下命令啟用嚴格 SQL 模式。

mysql> Set SQL_MODE ='traditional';
Query OK, 0 rows affected (0.00 sec)

現在,如果嘗試將超出範圍的值插入列中,MySQL 將返回錯誤,並且兩個插入操作都將失敗,這可以透過以下查詢進行檢查:

mysql> Insert into Counting(Range1, Range2) Values(256,256);
ERROR 1264 (22003): Out of range value for column 'Range1' at row 1

mysql> Select * from counting;
Empty set (0.00 sec)

(B) 停用嚴格 SQL 模式 - 當停用嚴格 SQL 模式時,MySQL 會將值裁剪到該列資料型別的合適端點,並存儲結果值。MySQL 會發出警告,這些警告是由於裁剪而發生的列賦值轉換的結果。

例如,如果在停用嚴格 SQL 模式後將值插入列中,MySQL 將發出警告,並在裁剪到合適的端點後儲存值。這可以透過以下查詢理解:

mysql> Set SQL_MODE = '';
Query OK, 0 rows affected (0.00 sec)

mysql> Insert Into Counting(Range1,Range2) values (256,256);
Query OK, 1 row affected, 2 warnings (0.02 sec)

mysql> Show Warnings;
+---------+------+-------------------------------------------------+
| Level   | Code | Message                                         |
+---------+------+-------------------------------------------------+
| Warning | 1264 | Out of range value for column 'Range1' at row 1 |
| Warning | 1264 | Out of range value for column 'Range2' at row 1 |
+---------+------+-------------------------------------------------+
2 rows in set (0.00 sec)

mysql> Select * from Counting;
+--------+--------+
| Range1 | Range2 |
+--------+--------+
| 127    | 255    |
+--------+--------+
1 row in set (0.00 sec)

更新於:2020年1月30日

580 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.