สร้าง 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