Mysql datetime DEFAULT CURRENT_TIMESTAMP错误

时间:2014-04-18 12:09:31

标签: php mysql linux windows

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上,案例不敏感,例如。新旧两者被认为是相同的。但在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

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

3 个答案:

答案 0 :(得分:32)

在MySQL 5.6中添加了 DEFAULT CURRENT_TIMESTAMP DATETIME (数据类型)的支持。

在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 的输出将显示字符类型列的字符集和排序规则。这是按列级别指定的。当新列定义未指定字符集时,表级指定的“default”适用于添加到表中的新列。

<击>

<强>更新

Kaii指出,我关于“区分大小写”的答案处理存储在列中的值,以及查询是否将从包含值"New"的列返回值将返回类似{{1}的谓词}}

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

答案 1 :(得分:3)

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

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

您在这里遇到行为不匹配的原因是文件系统,因为每个表都是作为单独的文件创建的,文件系统会为您处理区分大小写。

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

  

例如,在Unix上,您可以有两个名为my_table的不同表   和MY_TABLE,但在Windows上这两个名称被认为是相同的。   避免数据库或信件箱引起的数据传输问题   表名,你有两个选择:

     
      
  • 在所有系统上使用lower_case_table_names=1。这样做的主要缺点是,当您使用SHOW TABLESSHOW DATABASES时,您可以这样做   没有看到原始信件中的名字。

  •   
  • 在Unix上使用lower_case_table_names=0,在Windows上使用lower_case_table_names=2。这样可以保留数据库和表名的字母大小写。   这样做的缺点是你必须确保你的陈述   总是用正确的方式引用你的数据库和表名   Windows上的字母。如果您将语句转移到Unix,那么   lettercase很重要,如果是lettercase,它们不起作用   不正确。

    例外: 如果您正在使用InnoDB表,而您正试图避免这些数据传输问题,则应设置{{1}在所有平台上强制名称转换为小写。

  •   
     

[...]
  为避免这种差异造成的问题,   最好采用一致的约定,例如始终创建   并使用小写名称引用数据库和表。这个   建议采用惯例,以实现最大的便携性和易用性。

这是MySQL manual on the case sensitivity of identifiers

的摘录

答案 2 :(得分:1)

如果您希望默认时间必须更改为数据类型中的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