MySQL CREATE TABLE 语法错误:`timestamp(0)` 修改为 `timestamp`
MySQL CREATE TABLE 语法错误:timestamp(0) 修改为 timestamp
在使用 MySQL 创建表时,可能会遇到以下语法错误:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修' at line 9
这个错误通常是因为在定义 timestamp 类型字段时使用了 timestamp(0) 语法,导致语法错误。
错误代码示例:
CREATE TABLE `tb_carousel` (
`carousel_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '首页轮播图主键id',
`carousel_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '轮播图',
`redirect_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '##' COMMENT '点击后的跳转地址(默认不跳转)',
`carousel_rank` int(11) NOT NULL DEFAULT 0 COMMENT '排序值(字段越大越靠前)',
`is_deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标识字段(0-未删除 1-已删除)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` int(11) NOT NULL DEFAULT 0 COMMENT '创建者id',
`update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_user` int(11) NULL DEFAULT 0 COMMENT '修改者id',
PRIMARY KEY (`carousel_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '轮播图表' ROW_FORMAT = Dynamic;
解决方法:
将 timestamp(0) 修改为 timestamp 即可。
正确的代码:
CREATE TABLE `tb_carousel` (
`carousel_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '首页轮播图主键id',
`carousel_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '轮播图',
`redirect_url` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '##' COMMENT '点击后的跳转地址(默认不跳转)',
`carousel_rank` int(11) NOT NULL DEFAULT 0 COMMENT '排序值(字段越大越靠前)',
`is_deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标识字段(0-未删除 1-已删除)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` int(11) NOT NULL DEFAULT 0 COMMENT '创建者id',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_user` int(11) NULL DEFAULT 0 COMMENT '修改者id',
PRIMARY KEY (`carousel_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '轮播图表' ROW_FORMAT = Dynamic;
原因分析:
timestamp(0) 语法是 MySQL 5.6 版本之前使用的语法,用来表示 timestamp 字段的精度为 0,即只存储秒级的时间戳。而 MySQL 5.6 版本之后,默认 timestamp 字段的精度为 6,即存储微秒级的时间戳。
如果使用 timestamp(0) 语法,就会导致语法错误。所以建议使用 timestamp 语法,以保证代码兼容性。
原文地址: https://www.cveoy.top/t/topic/oSyb 著作权归作者所有。请勿转载和采集!