如何在H2数据库中替换枚举类型?

Igo*_*nko 11 java mysql h2

MySQL方言:

CREATE TABLE My_Table ( my_column enum ('first', 'second', ... 'last'));
Run Code Online (Sandbox Code Playgroud)

H2方言:

CREATE TABLE My_Table ( my_column ? ('first', 'second', ... 'last'));
Run Code Online (Sandbox Code Playgroud)

什么类型在H2中也等同于enumMySQL 的类型?

Tho*_*ler 10

我不确定这是否是您正在寻找的,但您能做的是使用检查约束:

CREATE TABLE My_Table(my_column varchar(255) 
    check (my_column in ('first', 'second', 'last')));

-- fails:
insert into My_Table values('x');

-- ok:
insert into My_Table values('first');
Run Code Online (Sandbox Code Playgroud)

这将适用于H2,Apache Derby,PostgreSQL,HSQLDB甚至SQLite.我没有测试其他数据库.


Vir*_*zzo 7

空无一人; 仍然,enum在任何情况下都不是一个很好的解决方案,只需使用一个参考表.

  • 在没有推理或参考的情况下,“枚举在任何情况下都不是一个好的解决方案”的减号1。 (2认同)

naf*_*afg 5

看起来 H2 有枚举:http : //www.h2database.com/html/datatypes.html#enum_type

所以完全相同的语法应该有效。(我不知道语义匹配的程度。)

  • 现在确实有支持,[截至 ** 1.4.195 版**,于 2017 年 4 月 23 日发布](http://www.h2database.com/html/changelog.html),但是当问题写了。也许你想在你的答案中澄清。 (3认同)