MariaDB语法支持奇怪

时间:2017-07-20 09:30:28

标签: sql mariadb

我有几个MariaDB实例,例如10.1.17,10.1.25和10.2.6

我创建了一个运行在10.2.6和10.1.17上的SQL,但不是在10.1.25上运行,我不知道为什么。

ALTER TABLE FOOBAR ALTER CREATED SET DEFAULT NOW();
  

您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,以便在'NOW()'

附近使用正确的语法

在10.1.25上有效的是CREATE TABLE,但只有CURRENT_TIMESTAMP代替NOW()

CREATE TABLE `FOOBAR` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CREATED` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我也尝试过,但也行不通。

ALTER TABLE FOOBAR ALTER CREATED SET DEFAULT CURRENT_TIMESTAMP;

2 个答案:

答案 0 :(得分:1)

我无法重现这个问题:

MariaDB [_]> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.25-MariaDB |
+-----------------+
1 row in set (0.00 sec)

MariaDB [_]> DROP TABLE IF EXISTS `FOOBAR`;
Query OK, 0 rows affected (0.00 sec)

MariaDB [_]> CREATE TABLE `FOOBAR` (
    ->   `ID` bigint(20) NOT NULL AUTO_INCREMENT,
    ->   `CREATED_0` DATETIME DEFAULT NOW(),
    ->   `CREATED_1` DATETIME DEFAULT CURRENT_TIMESTAMP(),
    ->   `CREATED_2` TIMESTAMP DEFAULT NOW(),
    ->   `CREATED_3` TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    ->   `CREATED_4` DATETIME,
    ->   `CREATED_5` DATETIME,
    ->   PRIMARY KEY (`ID`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

MariaDB [_]> SHOW CREATE TABLE `FOOBAR`\G
*************************** 1. row ***************************
       Table: FOOBAR
Create Table: CREATE TABLE `FOOBAR` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CREATED_0` datetime DEFAULT CURRENT_TIMESTAMP,
  `CREATED_1` datetime DEFAULT CURRENT_TIMESTAMP,
  `CREATED_2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `CREATED_3` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `CREATED_4` datetime DEFAULT NULL,
  `CREATED_5` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
  

CREATE TABLE :: DEFAULT

     

...

     

在MariaDB 10.2.1之前,你通常不能提供表达或   在插入时评估的功能。你必须提供一个常数   而是默认值。一个例外是您可以使用   CURRENT_TIMESTAMP作为要使用的TIMESTAMP列的默认值   插入时的当前时间戳。

     

...

     

MariaDB以10.0.1

开头      

CURRENT_TIMESTAMP也可以用作DATETIME

的默认值

但是,以下陈述失败:

MariaDB [_]> ALTER TABLE `FOOBAR`
    ->   ALTER COLUMN `CREATED_4` SET DEFAULT NOW();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
                    that corresponds to your MariaDB server version for the
                    right syntax to use near 'NOW()' at line 2

MariaDB [_]> ALTER TABLE `FOOBAR`
    ->   ALTER COLUMN `CREATED_5` SET DEFAULT CURRENT_TIMESTAMP();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
                    that corresponds to your MariaDB server version for the
                    right syntax to use near 'CURRENT_TIMESTAMP()' at line 2
  

ALTER TABLE

     

...

     

MariaDB以10.2.1

开头      在MariaDB 10.2.1

中引入了带有表达式和DEFAULT

DROP CONSTRAINT      

...

来自MariaDB 10.2.1

句:

MariaDB [_]> ALTER TABLE `FOOBAR`
    -> ALTER COLUMN `CREATED_4` SET DEFAULT NOW(),
    -> ALTER COLUMN `CREATED_5` SET DEFAULT CURRENT_TIMESTAMP();

可行,请参阅db<>fiddle

答案 1 :(得分:0)

您可以尝试以下操作: 在cursor.getString(cursor.getColumnIndex(KEY_ALARM_DESCRIPTION )); 之后添加ALTER TABLE table_name添加type时间戳不为空默认CURRENT_TIMESTAMP