列名として使用される予約語をエスケープするにはどうすればよいですか? MySQL/テーブルの作成 質問する

列名として使用される予約語をエスケープするにはどうすればよいですか? MySQL/テーブルの作成 質問する

.NET のクラスからテーブルを生成していますが、クラスにkeyMySQL の予約キーワードであるフィールド名がある可能性があるという問題があります。create table ステートメントでこれをエスケープするにはどうすればよいでしょうか? (注: 以下のもう 1 つの問題は、インデックス付け/一意化するにはテキストが固定サイズでなければならないことです)

create table if not exists misc_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
key TEXT UNIQUE NOT NULL,
value TEXT NOT NULL)ENGINE=INNODB;

ベストアンサー1

二重引用符を使用できるのは、ANSI SQL モード有効になっています

CREATE TABLE IF NOT EXISTS misc_info
  (
     id    INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
     "key" TEXT UNIQUE NOT NULL,
     value TEXT NOT NULL
  )
ENGINE=INNODB; 

または、独自のバックティックエスケープを使用します。(`さまざまなキーボードレイアウトで文字がどこにあるかは、この答え

CREATE TABLE IF NOT EXISTS misc_info
  (
     id    INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
     `key` TEXT UNIQUE NOT NULL,
     value TEXT NOT NULL
  )
ENGINE=INNODB; 

(ソース:MySQL リファレンスマニュアル、9.3 予約語

おすすめ記事