Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL จัดการกับค่าตัวเลขที่อยู่นอกช่วงได้อย่างไร


การจัดการค่าตัวเลข MySQL ซึ่งอยู่นอกช่วงที่อนุญาตของประเภทข้อมูลคอลัมน์ขึ้นอยู่กับโหมด SQL ด้วยวิธีต่อไปนี้ -

(A) เปิดใช้งานโหมดเข้มงวดของ SQL - เมื่อเปิดใช้งานโหมด SQL ที่เข้มงวด MySQL จะส่งกลับข้อผิดพลาดในการป้อนค่า put-of-range ในกรณีนี้ การแทรกค่าบางส่วนหรือทั้งหมดล้มเหลว

ตัวอย่างเช่น เราได้สร้างตารางที่มีสองคอลัมน์ที่มี TINYINT และ UNSIGNED TINYINT เป็นประเภทข้อมูลในคอลัมน์

mysql> สร้างการนับตาราง (Range1 Tinyint, Range2 Tinyint Unsigned) เคียวรีตกลง 0 แถวได้รับผลกระทบ (0.14 วินาที)

ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ เราได้เปิดใช้งานโหมด SQL ที่เข้มงวด

mysql> ตั้งค่า SQL_MODE ='traditional';Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที)

ตอนนี้ หากเราจะพยายามแทรกค่าที่อยู่นอกช่วงลงในคอลัมน์ MySQL จะแสดงข้อผิดพลาดและการแทรกทั้งสองล้มเหลว ซึ่งสามารถตรวจสอบได้โดยแบบสอบถามด้านล่าง -

mysql> แทรกลงใน Counting(Range1, Range2) Values(256,256);ERROR 1264 (22003):Out of range value for column 'Range1' at row 1mysql> Select * from counting;Empty set (0.00 วินาที) 

(B) ปิดการใช้งานโหมดเข้มงวดของ SQL - เมื่อปิดใช้งานโหมด SQL แบบจำกัด ค่าจะถูกตัดโดย MySQL จนถึงจุดสิ้นสุดที่เหมาะสมของชนิดข้อมูลคอลัมน์นั้นและสะสมค่าผลลัพธ์ MySQL สะท้อนคำเตือนซึ่งเป็นผลมาจากการแปลงการกำหนดคอลัมน์ที่เกิดขึ้นเนื่องจากการคลิป

ตัวอย่างเช่น หากเราจะแทรกค่าลงในคอลัมน์หลังจากปิดใช้งานโหมดเข้มงวดของ SQL แล้ว MySQL จะสะท้อนคำเตือนและจัดเก็บค่าหลังจากตัดแต่งจนถึงจุดสิ้นสุดที่เหมาะสม สามารถเข้าใจได้ด้วยคำถามด้านล่าง -

mysql> ตั้งค่า SQL_MODE ='';Query OK, 0 แถวได้รับผลกระทบ (0.00 วินาที)mysql> แทรกลงในค่า Counting (Range1,Range2) (256,256); Query OK, 1 แถวได้รับผลกระทบ, 2 คำเตือน (0.02 วินาที) mysql> แสดงคำเตือน;+---------+------+----------------------------- ------------------------------------+| ระดับ | รหัส | ข้อความ |+---------+------+----------------------------- --------------------+| คำเตือน | 1264 | ค่าที่อยู่นอกช่วงสำหรับคอลัมน์ 'Range1' ที่แถว 1 || คำเตือน | 1264 | ค่านอกช่วงสำหรับคอลัมน์ 'Range2' ที่แถว 1 |+---------+------+------------------- ------------------------------+2 แถวในชุด (0.00 วินาที) mysql> เลือก * จากการนับ;+--- -----+-------+| Range1 | Range2 |+---------+-------+| 127 | 255 |+--------+ -------- +1 แถวในชุด (0.00 วินาที)