解决H2创建表的时候出现的expected “ARRAY, INVISIBL...问题

在使用H2数据库时遇到创建表的语法错误,问题在于INT(11)和BOOLEAN(1)的语法不被支持。解决方案是将INT(11)改为INT,去除括号,并将BOOLEAN(1)改为BOOLEAN。同时,主键的NOT NULL约束是不必要的,因为默认情况下标识列就是NOT NULL。修改后的SQL语句能够成功创建表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

报错信息

背景介绍

解决方案

原因解析

报错信息

[42001][42001] Syntax error in SQL statement "CREATE TABLE simple\000d\000a(id bigint[*](10) ,\000d\000aname varchar(50),\000d\000aage int ,\000d\000aemail varchar (50)\000d\000a)"; expected "ARRAY, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, DEFAULT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, COMMENT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ,, )"; SQL statement:

背景介绍

在使用里的H2作为初始项目的时候,出现了一直创建不了表的问题。

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

解决方案

DROP TABLE IF EXISTS simple_user;

CREATE TABLE simple_user
(
    id BIGINT NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

原因解析

INT(11)只允许在MySQL和MariaDB兼容模式下使用,但H2是忽略指定精度的,也就是说不允许出现括号以及里面的限制。在H2 2.0的所有其他兼容模式下,此定义都被拒绝,需要使用INT或INTEGER。

其次也不允许使用BOOLEAN(1),如果它在1.4.200中工作,那么它就是解析器中的一个错误。你需要使用BOOLEAN。

AUTO_INCREMENT子句通常也应该仅在MySQL和MariaDB兼容模式下使用,但它也可以在常规模式下使用。正确的子句是DEFAULT AS IDENTITY生成的,并且主键和标识列不需要显式的NOT NULL约束,您可以删除它。约束通常也应该在所有其他子句之后指定,在H2实际接受标识选项之前不为NULL,但这种错误的子句顺序没有记录,也不受支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值