Mysql datetime DEFAULT CURRENT_TIMESTAMP错误

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' 

在Windows上,这种情况并不敏感,例如。 新的和新的都被认为是相同的。 但在Linux上的情况是敏感的。

Linux的configuration

MySQL 5.5.33,phpMyAdmin 4.0.5和PHP 5.2.17

Windows的configuration

MySql:5.6.11,phpMyAdmin 4.0.4.1 PHP:5.5.0

他们有什么办法使这两个系统的共同点。 或者有其他的方法。 谢谢阅读。

Solutions Collecting From Web of "Mysql datetime DEFAULT CURRENT_TIMESTAMP错误"

在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的输出将显示字符类型列的字符集和归类。 这是按列级别指定的。 在新的列定义没有指定字符集时,表级中指定的“默认”适用于添加到表中的新列。

UPDATE

Kaii指出,关于“区分大小写”的回答是处理列中存储的值,并且查询是否将返回包含值"New"的列的值将返回一个谓词,如"t.col = 'new'"

有关标识符 (例如,表名)在Windows上比在Linux上处理方式不同(默认情况下),请参阅Kaii的答案。

由于DEFAULT CURRENT_TIMESTAMP问题已经得到解答,我只会回应windows和linux之间的表名中的区分大小写不匹配。

在Windows上,文件系统默认情况下不区分大小写。
但在Linux和其他* NIX操作系统上,默认情况下是区分大小写的。

之所以会出现行为不匹配的原因是文件系统,因为每个表都是作为单独的文件创建的,文件系统会为您处理区分大小写。

MySQL有一个参数来覆盖这个行为:

例如,在Unix上,可以有两个名为my_tableMY_TABLE表,但在Windows上,这两个名称被认为是相同的。 为避免由于数据库或表名称的信箱而引起的数据传输问题,您有两种选择:

  • 在所有系统上使用lower_case_table_names=1 。 这样做的主要缺点是当你使用SHOW TABLESSHOW DATABASES ,你看不到原来的lettercase中的名字。

  • 在Unix上使用lower_case_table_names=0 ,在Windows上使用lower_case_table_names=0 lower_case_table_names=2 。 这保留了数据库和表名的字母大小写。 这样做的缺点是您必须确保您的语句始终在Windows上使用正确的lettercase引用数据库和表名。 如果你把你的语句转移到Unix中,那么lettercase是有意义的,如果这个casecase是不正确的,他们就不会工作。

    例外情况:如果您使用的是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