Giá trị mặc định không hợp lệ cho 'dateAdded'


90

Tôi gặp sự cố ngu ngốc với SQL mà tôi không thể khắc phục.

BẢNG ALTER `tin tức` 
 THÊM `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT,
 THÊM TỪ KHÓA CHÍNH (`dateAdded`)

Lỗi:

(#1067)Invalid default value for 'dateAdded'

Ai đó có thể giúp tôi được không?


8
Đây có thể là một câu hỏi ngu ngốc, nhưng tại sao lại như AUTO_INCREMENT DATETIMEvậy?
jave.web

Câu trả lời:


137

CURRENT_TIMESTAMPchỉ được chấp nhận trên TIMESTAMPcác lĩnh vực.DATETIMECác trường phải được để lại với giá trị mặc định rỗng hoặc không có giá trị mặc định nào - giá trị mặc định phải là một giá trị không đổi, không phải là kết quả của một biểu thức.

tài liệu liên quan: http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

Bạn có thể giải quyết vấn đề này bằng cách đặt trình kích hoạt sau chèn trên bảng để điền giá trị "bây giờ" vào bất kỳ bản ghi mới nào.


70
Có vẻ như kể từ mysql 5.6.5, bạn có thể sử dụng CURRENT_TIMESTAMP với các trường DATETIME. Xem dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Frank Schwieterman vào

2
Cảm ơn Frank, đã tìm thấy sự cố này khi cố gắng nhập một db đã xuất từ ​​xampp mới nhất sang một xa hơn.
HCD

HCD, Frank ... đã tìm thấy vấn đề tương tự khi xuất từ ​​MariaDb 10.x sang MariaDB 5.5 ... cảm ơn
Aukhan

1
Lỗi này cũng xảy ra trong mariadb 5.5. Nâng cấp lên mariadb 10 và nó đã được giải quyết. Cảm ơn Frank
Samuel Tesler

50

CURRENT_TIMESTAMPlà phiên bản cụ thể và hiện được phép cho DATETIMEcác cột kể từ phiên bản 5.6.

Xem tài liệu MySQL .


9
bạn có chắc không ? Tôi gặp lỗi ở trên trong phiên bản 5.7.x
Ramesh

16

Cũng cần lưu ý khi chỉ định DATETIMEDATETIME(3)hoặc giống như trên MySQL 5.7.x, bạn cũng phải thêm giá trị tương tự cho CURRENT_TIMESTAMP(3). Nếu không, nó sẽ tiếp tục ném ' Giá trị mặc định không hợp lệ '.


Điều này đã giải quyết vấn đề cho tôi vào 5.7.x. Các trường datetime của tôi được xác định là datetime (6) và việc sử dụng CURRENT_TIMESTAMP (6) đã giải quyết được vấn đề
Brad

Điều này rất đáng được lưu ý.
Mateus Felipe

1

Tôi gặp sự cố tương tự, bản sửa lỗi sau đã giải quyết được sự cố của tôi.

  • Chọn Loại là 'TIMESTAMP'

  • KHÔNG NHẬP BẤT KỲ THỨ NÀO TRONG LĨNH VỰC CHIỀU DÀI / GIÁ TRỊ. GIỮ NGÂN HÀNG

  • Chọn CURRENT_TIMESTAMP làm giá trị Mặc định.

Tôi đang sử dụng MySQL phiên bản 5.5.56


0

Tôi có phiên bản mysql 5.6.27 trên LEMP và CURRENT_TIMESTAMP của mình vì giá trị mặc định hoạt động tốt.


0

mysql phiên bản 5.5 đặt giá trị mặc định datetime là CURRENT_TIMESTAMP sẽ báo lỗi bạn có thể cập nhật lên phiên bản 5.6, nó đặt giá trị mặc định datetime là CURRENT_TIMESTAMP


0

Thay đổi kiểu từ datetime sang timestamp và nó sẽ hoạt động! Tôi đã gặp sự cố tương tự đối với mysql 5.5.56-MariaDB - Máy chủ MariaDB Hy vọng nó có thể giúp được ... xin lỗi nếu bị mô tả

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.