MariaDB 5.5 create table default value 需要注意的事项

本文主要探讨在MariaDB 5.5中遇到的时间戳datestamp默认值ERROR 1293 (HY000)和varchar默认值ERROR 1064 (42000)的问题。在MySQL 8.0.17中可以正常工作的建表语句在MariaDB 5.5中导致错误。通过测试发现,timestamp类型仅能设置一个默认值为CURRENT_TIMESTAMP,而varchar默认值不能使用函数表达式。此外,还介绍了在CentOS 7上安装MariaDB的注意事项和如何升级到更高版本。
摘要由CSDN通过智能技术生成

主要是时间戳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,firstLoginTimelastLoginTime这三个字段,都是设置的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) 
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值