1

Java DB/Derby - テーブル(列)名の空白 - エスケープする方法は? MySQL データベースでは、単に `` (アクセント記号) でエスケープされますが、次のようなクエリ (Java DB) を実行しようとすると、次のようになります。

CREATE TABLE `etc etc` (ID INT PRIMARY KEY, Title VARCHAR(12))

エラーが発生します:

java.sql.SQLSyntaxErrorException: 行 1、列 14 で字句エラーが発生しました。検出: "`" (96)、後: ""。

解決策はありますか?

編集:

本当に包括的な回答をありがとう。興味深いものを見つけました(Java DB):

次のようなテーブルを作成しても問題ありませんでした。

CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12))

後で結果を取得するには:

SELECT * FROM "etc etc"

しかし、次のようにテーブルを作成すると (空白と引用符なし):

CREATE TABLE etc_etc (ID INT PRIMARY KEY, Title VARCHAR(12))

後で次のような結果が得られます (二重引用符を使用します。たとえば、二重引用符は実際には必要ありません)。

SELECT * FROM "etc_etc"

エラーが発生します:

java.sql.SQLSyntaxErrorException: テーブル/ビュー 'etc_etc' が存在しません。

したがって、私の結論は、テーブルの作成中に引用符が使用された場合 (名前に空白が含まれているかどうかは重要ではありません)、後で結果を取得するときにも引用符を使用する必要があるということです。逆もまた同様です(この場合、もちろん空白なしで)。

文字の代わりに空白を使用しない方がよいことに同意します_。しかし、私はMySQLでこれらの`グレイブアクセント文字が好きでした...

4

1 に答える 1

2

SQL 標準では、予約語である識別子や識別子で許可されていない文字を使用する識別子を二重引用符で囲む必要があります。MySQL は恐ろしいバッククォート ` を使用して標準を無視するだけであることに注意してください

したがって、ステートメントは次のようになります。

CREATE TABLE "etc etc" (ID INT PRIMARY KEY, Title VARCHAR(12));

「引用符付き識別子」(または「区切り識別子」) を使用すると、名前の大文字と小文字が区別されることに注意してください。"etc etc"は とは異なるテーブル名です"Etc Etc"。したがって、上記のようにテーブルを作成した後は、名前を常に小文字で記述する必要があります。

最善の方法は、引用符で囲まれた識別子を完全に避けることです。したがって、あなたの場合etc_etc、アンダースコアを使用して2つの単語を視覚的に分離する名前としておそらく解決する必要があります.

于 2013-08-07T17:35:13.647 に答える