Mysql datetime DEFAULT CURRENT_TIMESTAMP错误

Joh*_*Pie 13 mysql linux windows

1. 当我在Windows上运行这个MYSQL语法时,它运行正常.

CREATE TABLE New
(
id bigint NOT NULL AUTO_INCREMENT,
timeUp datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在Linux上运行此代码时,我收到了一个错误

 #1067 - Invalid default value for 'time'
Run Code Online (Sandbox Code Playgroud)

2. 在窗口的情况下是不敏感如.新旧两者被认为是相同的.但在linux上,案例很敏感.

配置Linux

MySQL 5.5.33,phpMyAdmin 4.0.5和PHP 5.2.17

Windows的配置

MySql:5.6.11,phpMyAdmin 4.0.4.1 PHP:5.5.0

他们有什么方法可以让它们在两个系统中都很常见.或任何替代方法.谢谢阅读.

spe*_*593 32

在MySQL 5.6中添加了DEFAULT CURRENT_TIMESTAMPDATETIME(数据类型)的支持.

在5.5及更早版本中,这仅适用于TIMESTAMP(数据类型)列.

可以使用BEFORE INSERT5.5中的触发器为列分配默认值.

 DELIMITER $$

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

区分大小写(针对存储在列中的值的查询)是由于collation用于列.结尾的排序规则_ci不区分大小写.例如latin1_swedish_ci,不区分大小写,但latin1_general_cs区分大小写.

输出SHOW CREATE TABLE foo将显示字符类型列的字符集和排序规则.这是按列级别指定的.当新列定义未指定字符集时,表级指定的"default"适用于添加到表中的新列.

UPDATE

Kaii指出我的关于"区分大小写"的答案处理存储在列中的值,以及查询是否将从包含值的列"New"返回值将返回类似谓词 "t.col = 'new'".

请参阅Kaii关于在Windows上以不同方式(默认情况下)处理标识符(例如表名)的答案.