2016-08-02 33 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

我不知道,但我會懷疑解析器中的一個怪癖。 –