2016-08-02 13 views
2

私は春には、次の文のようなもの使用してインメモリ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', 
    ... 
); 

質問には、これらの両方が一緒に指定されないことがありますか? documentation for the SQL grammarでの構文図の厳格な読書によると

+0

エラーメッセージを追加します。 – Jens

+0

@Jensエラーメッセージは、構文エラーの行に沿ったもので、私が書いたクエリ全体が表示されます。 – shyam

答えて

2

...

enter image description here

default句はNOT NULLの前に来ています。

+0

なぜ 'VARCHAR'の長さを指定せずに動作するのか? – shyam

+0

私には分かりませんが、私はパーサーの奇妙な疑いがあります。 –