2012-01-25 39 views
72

Tôi gặp sự cố ngu ngốc với SQL mà tôi không thể khắc phục.Giá trị mặc định không hợp lệ cho 'dateAdded'

ALTER TABLE `news` 
ADD `dateAdded` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AUTO_INCREMENT , 
ADD PRIMARY KEY ( `dateAdded`) 

Lỗi:

(#1067)Invalid default value for 'dateAdded' 

ai đó có thể giúp tôi?

+3

Đây có thể là một câu hỏi ngu ngốc, nhưng tại sao bạn 'AUTO_INCREMENT'' DATETIME'? –

Trả lời

115

CURRENT_TIMESTAMP chỉ chấp nhận được trên các trường TIMESTAMP. Các trường DATETIME phải được để trống bằng giá trị mặc định null hoặc không có giá trị mặc định nào cả - giá trị mặc định phải là giá trị không đổi, không phải là kết quả của 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ể làm việc này bằng cách thiết lập một kích hoạt sau khi chèn vào bảng để điền vào "bây giờ" giá trị trên bất kỳ kỷ lục mới.

+52

Nó trông giống như mysql 5.6.5, bạn có thể sử dụng CURRENT_TIMESTAMP với các trường DATETIME. Xem http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html –

+1

Cảm ơn Frank, đã tìm thấy sự cố này khi cố gắng nhập db được xuất từ ​​xampp mới nhất sang phiên bản cũ hơn. –

+0

Các HCD, Frank ... tìm thấy cùng một vấn đề xuất khẩu từ MariaDb 10.x để MariaDB 5.5 ... cảm ơn – Aukhan

42

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

Xem MySQL docs.

+3

bạn có chắc chắn không? Tôi nhận được lỗi ở trên trong phiên bản 5.7.x –

7

Cũng 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 cùng một giá trị 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ệ'.

1

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

0

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

0

Thay đổi kiểu từ datetime để đánh dấu thời gian và nó sẽ làm việc! tôi đã cùng một vấn đề cho mysql 5.5.56-MariaDB - MariaDB server Hy vọng nó có thể giúp ... xin lỗi nếu depricated

0

tôi đã cùng một vấn đề, sửa chữa sau giải quyết vấn đề của tôi.

  • Chọn loại là 'dấu thời gian'

  • ĐỪNG VÀO ANYTHING dài/giá trị trường. GIỮ IT BLANK

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

Tôi đang sử dụng MySQL ver 5.5.56

Các vấn đề liên quan