ค่าเริ่มต้นไม่ถูกต้องสำหรับ "dateAdded"


91

ฉันมีปัญหาโง่ ๆ กับ SQL ที่ฉันไม่สามารถแก้ไขได้

แก้ไขตาราง "ข่าว" 
 ADD "dateAdded` DATETIME not NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 เพิ่มคีย์หลัก ("dateAdded`)

ข้อผิดพลาด:

(#1067)Invalid default value for 'dateAdded'

ใครสามารถช่วยฉัน?


9
นี่อาจเป็นคำถามโง่ ๆ แต่ทำไมคุณAUTO_INCREMENT DATETIME?
jave.web

คำตอบ:


139

CURRENT_TIMESTAMPใช้ได้เฉพาะในTIMESTAMPฟิลด์เท่านั้น DATETIMEต้องทิ้งฟิลด์ไว้ด้วยค่าเริ่มต้นที่เป็นค่าว่างหรือไม่มีค่าเริ่มต้นเลย - ค่าเริ่มต้นต้องเป็นค่าคงที่ไม่ใช่ผลลัพธ์ของนิพจน์

เอกสารที่เกี่ยวข้อง: http://dev.mysql.com/doc/refman/5.0/th/data-type-defaults.html

คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยตั้งทริกเกอร์โพสต์แทรกบนตารางเพื่อกรอกค่า "ตอนนี้" ในระเบียนใหม่


70
ดูเหมือนว่าใน mysql 5.6.5 คุณสามารถใช้ CURRENT_TIMESTAMP กับฟิลด์ DATETIME ได้ ดูdev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman

2
ขอบคุณ Frank พบปัญหานี้เมื่อพยายามนำเข้าฐานข้อมูลที่ส่งออกจาก xampp ล่าสุดไปยังอันก่อนหน้า
HCD

HCD, Frank ... พบปัญหาเดียวกันในการส่งออกจาก MariaDb 10.x ไปยัง MariaDB 5.5 ... ขอบคุณ
Aukhan

1
ข้อผิดพลาดนี้เกิดขึ้นใน mariadb 5.5 ด้วย อัปเกรดเป็น mariadb 10 และแก้ไขแล้ว ขอบคุณ Frank
Samuel Tesler

51

CURRENT_TIMESTAMPเป็นเวอร์ชันเฉพาะและตอนนี้ได้รับอนุญาตสำหรับDATETIMEคอลัมน์ตั้งแต่เวอร์ชัน 5.6

ดูเอกสาร MySQL


9
คุณแน่ใจไหม ? ฉันได้รับข้อผิดพลาดข้างต้นในเวอร์ชัน 5.7.x
Ramesh Pareek

17

นอกจากนี้โปรดทราบเมื่อระบุDATETIMEเป็นDATETIME(3)หรือชอบบน MySQL 5.7.x คุณต้องเพิ่มค่าเดียวกันสำหรับCURRENT_TIMESTAMP(3). หากไม่เป็นเช่นนั้นระบบจะโยน " ค่าเริ่มต้นไม่ถูกต้อง " ต่อไป


1
สิ่งนี้ช่วยแก้ปัญหาให้ฉันใน 5.7.x. ฟิลด์วันที่และเวลาของฉันถูกกำหนดเป็นวันที่และเวลา (6) และการใช้ CURRENT_TIMESTAMP (6) แก้ปัญหาได้
แบรด

1
นี่เป็นสิ่งที่ควรค่าแก่การสังเกต
Mateus Felipe

1

ฉันมีปัญหาเดียวกันการแก้ไขต่อไปนี้ช่วยแก้ปัญหาของฉันได้

  • เลือกประเภทเป็น 'TIMESTAMP'

  • อย่าป้อนสิ่งใด ๆ ในฟิลด์ความยาว / ค่านิยม ให้มันว่าง

  • เลือก CURRENT_TIMESTAMP เป็นค่าเริ่มต้น

ฉันใช้ MySQL เวอร์ชั่น 5.5.56



0

mysql เวอร์ชัน 5.5 ตั้งค่าวันที่และเวลาเริ่มต้นเป็น CURRENT_TIMESTAMP จะรายงานข้อผิดพลาดที่คุณสามารถอัปเดตเป็นเวอร์ชัน 5.6 ได้โดยตั้งค่าเริ่มต้นวันที่และเวลาเป็น CURRENT_TIMESTAMP


0

เปลี่ยนประเภทจากวันที่เวลาเป็นเวลาและจะใช้งานได้! ฉันมีปัญหาเดียวกันสำหรับ mysql 5.5.56-MariaDB - เซิร์ฟเวอร์ MariaDB หวังว่ามันจะช่วยได้ ... ขออภัยหากขาดราคา


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.