ホームページ >データベース >mysql チュートリアル >MySQL は範囲外の値をどのように処理しますか?
列のデータ型の許容範囲を超える MySQL 値の処理は、次のように SQL モードによって異なります。
(A) SQL 厳密モードを有効にする - 厳密 SQL モードが有効な場合、範囲値を入力すると MySQL はエラーを返します。この場合、一部またはすべての値の挿入は失敗します。
たとえば、データ型が TINYINT と UNSIGNED TINYINT の 2 つの列を持つテーブルを作成します。
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 はエラーが発生し、2 回挿入されます。すべて失敗しました。次のクエリで確認できます。
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)によって理解できます。
以上がMySQL は範囲外の値をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。