2016-08-02 43 views
2

我想使用类似下面的语句春天来初始化一个inmemory H2数据库:的SQLException默认值,指定长度时沿着VARCHAR

===Throws SQLException=== 

CREATE TABLE config (
    id INTEGER NOT NULL, 
    module_id VARCHAR(10) NOT NULL DEFAULT 'global', 
    ... 
); 

每次我尝试运行该项目的SQLException是抛出说语法错误。经过相当多的实验后,我注意到当我删除DEFAULT关键字时,没有发生异常。

===This works=== 

CREATE TABLE config (
    id INTEGER NOT NULL, 
    module_id VARCHAR(10) NOT NULL, 
    ... 
); 

什么是更有趣的是,当我取消了对VARCHAR长度和保持DEFAULT关键字,因为它也是它的工作。

===This also works=== 

CREATE TABLE config (
    id INTEGER NOT NULL, 
    module_id VARCHAR NOT NULL DEFAULT 'global', 
    ... 
); 

所以问题是,是否有某些东西阻止这两个指定在一起?

+0

添加错误消息 – Jens

+0

@Jens错误消息是沿着语法错误的行,并向我展示了我编写的整个查询。 – shyam

回答

2

按照语法图中documentation for the SQL grammar严格读...

enter image description here

default子句来的NOT NULL之前。

+0

任何线索为什么它的工作没有指定'VARCHAR'的长度? – shyam

+0

我不知道,但我会怀疑解析器中的一个怪癖。 –