[英]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 上,大小寫不敏感,例如。 New
和new
都被認為是相同的。 但在 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_table
和MY_TABLE
不同表,但在 Windows 上,這兩個名稱被認為是相同的。 為避免因數據庫或表名的字母大小寫引起的數據傳輸問題,您有兩種選擇:
在所有系統上使用
lower_case_table_names=1
。 這樣做的主要缺點是,當您使用SHOW TABLES
或SHOW 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.