MariaDB 5.5 create table default value 需要注意的事项
主要是时间戳datestamp和varchar的默认值的问题
本地开发环境用的是mysql 8.0.17,而服务器因为使用的是centOS 7,所以默认装的DB是MariaDB 5.5.因此让我发现在建表时候,两个版本之间的巨大差异。本次仅针对ERROR 1293 (HY000)和1064 (42000)这两个错误。
1. 时间戳datestamp-ERROR 1293(HY000)
首先,需求是:有几个字段是需要记录时间的,但是为了防止为空,所以给了默认值,默认值是当前系统的时间。上代码:
drop table IF EXISTS test.`t_test`;
CREATE TABLE test.`t_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`firstLoginTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`lastLoginTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
上述语句建表失败
上面的建表语句,在我本地的环境(mysql 8.0.17)是可以完美运行的,并且测试了插入空数据,默认值确实是当前时间。这里请注意,我对于createTime
,firstLoginTime
和lastLoginTime
这三个字段,都是设置的timestamp
,并且默认值都是CURRENT_TIMESTAMP
。然后使用该语句到服务器(centOS 7)上面的环境运行(MariaDB 5.5)运行,直接报错,建表失败。
错误信息:
ERROR 1293 (HY000) at line 6 in file: 'test.sql': Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
单纯分析错误提示,大概意思是,你只能给一个TIMESTAMP
类型的列赋值CURRENT_TIMESTAMP
;
测试1:去掉三个default值
use test;
drop table IF EXISTS test.`t_test`;
CREATE TABLE test.`t_test` (
`id` int(10)