MySQL Error Field xxx doesn't have a default value

ข้อผิดพลาด Field xxx doesn't have a default value ผมพบเมื่อมีการ Insert ข้อมูลลงใน MySQL ตามปกติ (ซึ่งปกติสามารถ Insert ได้) จากการตรวจสอบพบว่า ข้อผิดพลาดเกิดขึ้นเกือบทุกฟิลด์บนฐานข้อมูลเลยทีเดียว โดยฟิลด์ที่ไม่พบข้อผิดพลาดนี้ คือฟิลด์ที่เป็น auto_increment (ID) และฟิลด์ที่มีการกำหนดค่า default ไว้แล้ว

จากการตรวจสอบพบว่า Server นี้มีการใช้งานฐานข้อมูล MySQL เวอร์ชั่น 5.0.11 ซึ่งเป็นฐานข้อมูลปี 2005 (http://dev.mysql.com/doc/relnotes/mysql/5.0/en/news-5-0-11.html) บน Windows Server และ PHP 5.6.0

ทีแรกผมแก้ปัญหา โดยใช้วิธีกำหนดค่า default ให้กับทุกฟิลด์ ซึ่งก็พบว่ามันสามารถทำงานได้ตามปกติครับ แต่ปัญหาคือมันต้องมานั่งทำแบบนี้กับทุกตารางครับ วิธีนี้เลยไม่ค่อยสะดวกเท่าไร แต่ก็ใช้แก้ขัดได้

ในกรณีที่สามารถเข้าถึง root ของ Server ได้ ผมแนะนำให้แก้ไขการตั้งค่าของ MySQL แทนครับ เนื่องจากปัญหาข้างต้นเกิดจากการตั้งค่า Server SQL Modes ให้อยู่ในโหมด Strict SQL Mode ซึ่งจะมีผลให้ ในการ Insert และ update ข้อมูล จะต้องมีการระบุข้อมูลให้ครบทุกฟิลด์ หรือ ต้องมีการกำหนดค่า Default ให้กับฟิลด์ที่ไม่ได้มีการกรอกข้อมูล

การแก้ไข เปิดไฟล์ my.ini หรือ my.cnf (ลองมองหาดูนะครับ Server แต่ละเวอร์ชั่นอาจแตกต่างกัน) มองหา sql_mode และกำหนดค่าให้เป็นดังด้านล่าง
sql_mode=""

หรือถ้าหาไม่พบ สามารถเพิ่มการตั้งค่านี้ลงใน section [mysqld]
จากนั้น restart MySQL Server ครับ

ข้อมูลเพิ่มเติม https://mariadb.com/...en/library/sql-mode/
ผู้เขียน goragod โพสต์เมื่อ 25 พ.ค. 2558 เปิดดู 16,065 ป้ายกำกับ MySQL
^