簡體   English   中英

Mysql 日期時間 DEFAULT CURRENT_TIMESTAMP 錯誤

[英]Mysql datetime DEFAULT CURRENT_TIMESTAMP error

1.當我在 Windows 上運行這個 MYSQL 語法時,它運行正常:

CREATE TABLE New
(
  id bigint NOT NULL AUTO_INCREMENT,
  timeUp datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
)

但是當我嘗試在 Linux 上運行此代碼時,出現錯誤:

 #1067 - Invalid default value for 'time'

2.在 Windows 上,大小寫不敏感,例如。 Newnew都被認為是相同的。 但在 linux 上,大小寫是敏感的。

Linux的配置:

MySQL 5.5.33,phpMyAdmin:4.0.5,PHP:5.2.17

視窗配置:

MySql:5.6.11,phpMyAdmin:4.0.4.1,PHP:5.5.0

有沒有辦法讓它們在兩個系統中通用? 或者任何替代方法?

MySQL 5.6 中添加了對DATETIME (數據類型)的DEFAULT CURRENT_TIMESTAMP支持。

在 5.5 及更早版本中,這僅適用於TIMESTAMP (數據類型)列。

可以使用 5.5 中的BEFORE INSERT觸發器為列分配默認值。

 DELIMITER $$

 CREATE TRIGGER ...
 BEFORE INSERT ON mytable
 FOR EACH ROW
 BEGIN
    IF NEW.mycol IS NULL THEN
       SET NEW.mycol = NOW();
    END IF;
 END$$

區分大小寫(針對存儲在列中的值的查詢)是由於用於列的 collation _ci結尾的排序規則不區分大小寫。 例如 latin1_swedish_ci不區分大小寫,但 latin1_general_cs區分大小寫。

SHOW CREATE TABLE foo的輸出將顯示字符類型列的字符集和排序規則。 這是在每列級別指定的。 當新列定義未指定字符集時,在表級別指定的“默認值”適用於添加到表中的新列。

更新

Kaii 指出,我關於“區分大小寫”的回答涉及存儲在列中的值,並且查詢是否會從包含"New"值的列返回值將返回一個謂詞,如"t.col = 'new'"

請參閱 Kaii 關於標識符(例如表名)在 Windows 上的處理方式(默認情況下)與在 Linux 上不同的回答。

由於已經回答了DEFAULT CURRENT_TIMESTAMP問題,我將只回答 windows 和 linux 之間表名區分大小寫不匹配的問題。

在 Windows 上,文件系統默認不區分大小寫。
但是在 Linux 和其他類似 *NIX 的操作系統上,默認情況下它們區分大小寫。

此處行為不匹配的原因是文件系統,因為每個表都是作為單獨的文件創建的,並且文件系統會為您處理區分大小寫的問題。

MySQL 有一個參數來覆蓋此行為:

例如,在 Unix 上,您可以有兩個名為my_tableMY_TABLE不同表,但在 Windows 上,這兩個名稱被認為是相同的。 為避免因數據庫或表名的字母大小寫引起的數據傳輸問題,您有兩種選擇:

  • 在所有系統上使用lower_case_table_names=1 這樣做的主要缺點是,當您使用SHOW TABLESSHOW DATABASES ,您看不到原始字母中的名稱。

  • 在 Unix 上使用lower_case_table_names=0 ,在 Windows 上使用lower_case_table_names=0 lower_case_table_names=2 這保留了數據庫和表名的字母大小寫。 這樣做的缺點是您必須確保您的語句在 Windows 上始終使用正確的字母來引用您的數據庫和表名稱。 如果你把你的語句轉移到 Unix 上,在這種情況下,字母是重要的,如果字母不正確,它們將不起作用。

    例外:如果您正在使用 InnoDB 表並試圖避免這些數據傳輸問題,您應該在所有平台上設置lower_case_table_names=1以強制名稱轉換為小寫。

[...]
為了避免這種差異引起的問題,最好采用一致的約定,例如始終使用小寫名稱創建和引用數據庫和表 建議使用此約定以實現最大的便攜性和易用性。

這是MySQL 手冊中關於標識符區分大小寫的摘錄

如果您想將默認時間更改為數據類型中的timestamp

datetime時間將顯示表的用戶輸入...

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM