我有几个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;
答案 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)
...
在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
...
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