Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ';的默认值无效;创建日期';时间戳字段_Mysql - Fatal编程技术网

Mysql ';的默认值无效;创建日期';时间戳字段

Mysql ';的默认值无效;创建日期';时间戳字段,mysql,Mysql,我有以下sql create语句 mysql> CREATE TABLE IF NOT EXISTS `erp`.`je_menus` ( -> `id` INT(11) NOT NULL AUTO_INCREMENT , -> `name` VARCHAR(100) NOT NULL , -> `description` VARCHAR(255) NOT NULL , -> `live_start_date` DA

我有以下sql create语句

mysql> CREATE  TABLE IF NOT EXISTS `erp`.`je_menus` (
    ->   `id` INT(11) NOT NULL AUTO_INCREMENT ,
    ->   `name` VARCHAR(100) NOT NULL ,
    ->   `description` VARCHAR(255) NOT NULL ,
    ->   `live_start_date` DATETIME NULL DEFAULT NULL ,
    ->   `live_end_date` DATETIME NULL DEFAULT NULL , 
    ->   `notes` VARCHAR(255) NULL ,
    ->   `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    ->   `created_by` INT(11) NOT NULL ,
    ->   `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    ->   `updated_by` INT(11) NOT NULL , 
    ->   `status` VARCHAR(45) NOT NULL ,
    ->   PRIMARY KEY (`id`) ) 
    -> ENGINE = InnoDB;
给出下列错误

错误1067(42000):“创建日期”的默认值无效。


这里的错误是什么?

这是因为服务器SQL模式-


参考资料:
无零日期
-在严格模式下,不允许将
'0000-00-00'
作为有效日期。您仍然可以使用“忽略”选项插入零日期。如果不是在严格模式下,则接受日期,但会生成警告。

如果从MySQL工作台生成脚本

生成以下行

SET@OLD\u SQL\u MODE=@@SQL\u MODE,SQL\u MODE='TRADITIONAL,ALLOW_INVALID_DATES';
从SQL_模式中删除传统脚本,那么脚本就可以正常工作了

否则,您可以将SQL_模式设置为允许无效日期


SET SQL_MODE='ALLOW_INVALID_DATES';

时间戳的范围为“1970-01-01 00:00:01”UTC到“2038-01-19 03:14:07”UTC(请参阅)。默认值必须在该范围内

其他奇怪的、相关的行为:

CREATE TABLE tbl1 (
    ts TIMESTAMP);  
Query OK, 0 rows affected (0.01 sec)

CREATE TABLE tbl2 (
    ts TIMESTAMP,
    ts2 TIMESTAMP);
ERROR 1067 (42000): Invalid default value for 'ts2'

CREATE TABLE tbl3 (
    ts TIMESTAMP,
    ts2 TIMESTAMP DEFAULT '1970-01-01 00:00:01');
Query OK, 0 rows affected (0.01 sec)
侧注,如果要插入空值:

CREATE TABLE tbl4 (
    ts TIMESTAMP NULL DEFAULT NULL);

在ubuntu desktop 16.04中,我做到了以下几点:

  • 在您选择的编辑器中打开文件:
    /etc/mysql/mysql.conf.d/mysqld.cnf

  • 查找:
    sql\u模式
    ,它将位于
    [mysqld]
    下的某个位置

  • 并将
    sql\u模式设置为以下值:

    `create_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ,
    `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
    
    日期中无0,按0除法错误,无自动创建用户,无引擎替换

  • 通过执行以下操作保存并重新启动mysql服务:

    sudo服务mysql重启


  • 使用OSX,从Homebrew安装mysql,系统变量基于默认编译的mysql。 解决方案是从系统变量“sql模式”中删除“无零日期”

    只是请记住,范围涉及

    如果只想在会话中生效,请使用
    “@@session”
    ,例如:

    SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
    
    SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
    
    在这种情况下,一旦会话结束或更改它,它将不会影响。它对其他会话没有影响

    如果要影响所有客户端,请使用
    “@@global”
    ,例如:

    SET @@session.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
    
    SET @@global.sql_mode ="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".
    

    在这种情况下,它只影响更改后连接的客户端(不影响当前所有客户端),并且在服务器退出后将不起作用。

    我通过从自制中安装MySQL在OS X上解决了这个问题

    brew install mysql
    
    通过将以下内容添加到/usr/local/etc/my.cnf

    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    并重新启动MySQL

    brew tap homebrew/services
    brew services restart mysql
    

    您可能希望检查MySql实例上的时区设置:

    mysql> show variables like 'time_zone';
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | time_zone     | SYSTEM |
    +---------------+--------+
    
    在我的例子中,我意识到基础系统将其时区设置为BST而不是UTC,因此在create表格中,默认值“1970-01-01 00:00:01”被强制返回1小时,导致时间戳值无效

    对我来说,我真的希望机器的时区设置为UTC,这就解决了我的问题。当我运行Centos/7时,我只是简单地做到了

    # timedatectl set-timezone UTC
    

    并重新启动了所有程序。

    我在MySQL 5.7中遇到了类似的问题,代码如下:

    `update\u date`时间戳(3)不为空默认当前时间戳

    我改为使用此选项进行修复:


    `update\u date`TIMESTAMP NOT NULL默认当前时间戳

    禁用严格SQL模式

    Create disable_strict_mode.cnf file at /etc/mysql/conf.d/
    
    在文件中,输入以下两行:

    [mysqld]
    sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    最后,使用以下命令重新启动MySQL:

    sudo service mysql restart
    

    为了避免这个问题,您需要从mysql模式配置中删除
    NO_ZERO_DATE

  • 转到“phpmyadmin”
  • 加载phpmyadmin后,单击“变量”选项卡
  • 搜索“sql模式”
  • 单击编辑选项并从配置中删除
    NO_ZERO_DATE
    (及其尾部逗号)

  • 这是wamp或xamp在本地环境中非常常见的问题。

    您只需更改以下内容:

    `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    
    `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    
    对这样的事情:

    `create_date` TIMESTAMP NOT NULL DEFAULT '2018-04-01 12:00:00',
    

    默认值应从1000年开始

    比如说,

    ALTER TABLE mytable last_active DATETIME DEFAULT '1000-01-01 00:00:00'
    

    希望这对其他人有所帮助。

    只需在数据库SQL文件顶部定义以下行即可

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    它对我有用。

    更改此选项:

    `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    
    `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    
    对下列事项:

    `create_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ,
    `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
    

    你可以改变这个:

    `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    
    `create_date` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00',
    `update_date` TIMESTAMP NOT NULL DEFAULT  CURRENT_TIMESTAMP  ,
    
    create_date
    datetime非空默认值“0000-00-00 00:00:00”

    对这样的事情:

    `create_date` TIMESTAMP NOT NULL DEFAULT '2018-04-01 12:00:00',
    

    create_date
    varchar(80)非空默认值“0000-00-00:00:00”,

    我尝试将列的类型设置为“timestamp”,它对我有效。

    我看不出你的查询有任何错误,它在刚刚测试的5.1.50社区上有效。我的查询也没问题。不确定,但给该字段指定一个不同的名称,然后再试一次?我在ubuntu 10.04中使用mysql 5.1.56社区。不工作没有零日期需要一个日期。使用“1970-01-01 00:00:01”。[取自此处][1][1]:如何赋予忽略选项?您不能忽略此选项。这是服务器选项。如果您有权访问my.ini(mysql配置文件),请从sql模式选项中删除NO_ZERO_DATE并重新启动服务器。要检查此选项,请运行SHOW VARIABLES,如“sql_mode”,我使用mysql workbench生成了脚本。在脚本中,sql_模式设置为传统模式。如果我删除了传统的,脚本就可以工作了。在MySQL工作台首选项中,转到“Model:MySQL”选项卡。将“在生成的脚本中使用SQL模式”设置为“严格的转换表,没有自动创建用户,没有引擎替换”,这就很好地解决了问题。节省了我一些时间来搜索它为什么不工作:)啊,谢谢。设置SQL_MODE='ALLOW_INVALID_DATES';他是个救命恩人。当我尝试将wordpress站点迁移到另一台服务器(都是本地服务器)时,遇到了这个问题,由于这个错误,它不允许我导入数据库数据,即使表中没有出现这个错误的行。工作非常顺利!谢谢。设置SQL_MODE='ALLOW_INVALID_DATES';执行查询之前的技巧是否有帮助,除了
    sql\u模式
    不适用于我的实例o