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

แสดง Warning เมื่อ INSERT ค่า FLOAT ลงคอลัมน์ DECIMAL ใน MySQL

สร้าง Temporary Table ชนิด DECIMAL แล้ว INSERT ค่า FLOAT จะเกิด Warning ใช้ SHOW WARNINGS ดูรายละเอียด

ตัวอย่างการใช้งาน

สร้าง Temporary Table:

mysql> CREATE TEMPORARY TABLE WarningDemo (Value DECIMAL);

Insert ค่าทศนิยม (9.80) ลง DECIMAL (ไม่ระบุ precision/scale):

mysql> INSERT INTO WarningDemo VALUES (9.80);
Query OK, 1 row affected, 1 warning (0.03 sec)

ดู Warning:

mysql> SHOW WARNINGS;
+-------+------+--------------------------------------------+
| Level | Code | Message                                    |
+-------+------+--------------------------------------------+
| Note  | 1265 | Data truncated for column 'Value' at row 1 |
+-------+------+--------------------------------------------+

ตรวจสอบข้อมูลที่เก็บจริง:

mysql> SELECT * FROM WarningDemo;
+-------+
| Value |
+-------+
| 10    |
+-------+

คำอธิบาย

  • DECIMAL โดยไม่ระบุ precision/scale = DECIMAL(10,0) (จำนวนเต็ม)
  • ค่า 9.80 ถูกปัดเป็น 10 (Truncated)
  • MySQL แจ้ง Warning Code 1265: Data truncated

แนวทางแก้ไข

  • ระบุ Precision/Scale: DECIMAL(10,2) สำหรับ 2 ตำแหน่งทศนิยม
  • ใช้ SHOW WARNINGS หลัง INSERT/UPDATE เพื่อตรวจสอบ
  • ตั้งค่า sql_mode=STRICT_TRANS_TABLES เพื่อทำให้ Error แทน Warning