• ベストアンサー

日本語のエイリアスは" "で囲う必要があるのでしょうか

お世話になっております。 マニュアルやネットで検索を試みたのですがわからず、困っております。 できましたら、どなたかお助けいただけないでしょうか。 カラム名に付けるエイリアス(別名)は " " で囲わなくてはいけないでしょうか。 例:SELECT a AS "金額;" FROM tb; 「エイリアスに特殊記号を含む場合 " "で囲わなければいけない」という話を聞いたような気がするのですが、やってみると特殊記号の場合でも、 " " でも ' ' や` `(バッククォート)でも問題なさそうなのですが。 もし、このあたりのことで情報があったら、お教えいただけるとありがたいのですが。 申し訳ありません。どうか、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

#3、#4回答者です。 特に日本語の名称の場合を、知りたかったのですよね。 もう少し、コンパクトにまとめます。 (1)表名、列名、別名などの名前に、予約語と同じキーワードを使ったり、  一部の特殊記号を使う場合は、「`」や「"」で名前を囲む必要がある。 (2)日本語の名前は、(1)に該当しないので、「`」や「"」で名前を囲む必要はない。 (3)プロジェクト等で名前を「`」や「"」で囲む規定になっている場合は、以下の点に  注意。  (a)MySQLサーバの使用モードで、使う記号が異なっている。  (b)標準SQLや他の主要なRDBMSとは、使う記号が異なっている。   MySQLの非ANSIモード(MySQLの構文)=MySQLのディフォルト環境   →「`」(バッククォート)で囲む   MySQLのANSIモード(標準SQLの構文)   →「`」または「"」(ダブルクォーテーション)で囲む   標準SQLや他の主要なRDBMS   →「"」で囲む (4)「'」(シングルクォーテーション)は、文字定数を指定する場合に使う。  MySQLを非ANSIモードで使っている場合、「"」も文字定数を指定する場合に  使うので注意が必要。 

その他の回答 (4)

回答No.4

#3回答者です。 >MySQLでは「表名、列名、別名が日本語の場合は`で、アルファベットなど半角 >英数字のときは"で囲わなくてはいけない」という意味なのでしょうか。 そういう意味ではありません。 MySQLサーバを起動するとき、「非ANSI(MySQLの構文)」モードにするか、「ANSI構文(標準SQL)」モードにするかを指定できます。「ANSI構文にする」と明示指定していなければ、非ANSI(MySQL構文)のモードになります。 標準のインストールでは、非ANSIで設定されています。 また、「"」や「`」で囲む必要があるのは、表名、列名、別名に、予約語と同じ名前を指定するか、一部の特殊記号を使う場合ですから、日本語の名前は対象にはなりません。 まとめると、以下のようになります。 (1)非ANSI(MySQL構文)の場合 select oshiete-goo  →oshieteとgooの引き算 select 'oshiete-goo'  →文字定数 select "oshiete-goo" →文字定数 select `oshiete-goo` →「oshiete-goo」という列名や列の別名 select 'from' →文字定数 select "from"     →文字定数 select `from`      →fromという列名や別名 (2)ANSIの場合 →MySQLサーバ起動時に、--ansiか--sql-mode=ANSIを指定 select oshiete-goo  →oshieteとgooの引き算 select 'oshiete-goo'  →文字定数 select "oshiete-goo" →「oshiete-goo」という列名や列の別名 select `oshiete-goo` →「oshiete-goo」という列名や列の別名 select 'from' →文字定数 select "from"     →fromという列名や別名 select `from`      →fromという列名や別名 http://dev.mysql.com/doc/refman/4.1/ja/ansi-mode.html

回答No.3

表名、列名、別名などの名前に、予約語や一部の記号(※1)を使う場合、標準SQLや主要なRDBMSでは、「"」(ダブル・クォーテーション)で名前を囲む必要があります。 MySQLでは、ANSIで使う場合は、やはり「"」を使います。 一方、MySQLを非ANSIで使う場合は、「"」でなく「`」(バッククォート)で囲みます(※2)。MySQLを非ANSIで使った場合、「"」は、「'」(アポストロフィー)と同様に、文字定数(※3)であることを示します。 日本語の名前は、使用する環境により文字化けする場合があるので、使用する場合は注意が必要です。MySQLユーザ会でも、「名前に日本語を使えるが、使用しないほうが良い」と書かれています。 ※1 例えば、「-」(ハイフォン)を名前に使う場合、殆どのRDBMSでは、「"]で囲まないと、引き算と解釈される。 (「例) "oshiete-goo"なら、「oshiete-goo」を名称と解釈される。 oshiete-gooなら、oshieteとgooの引き算と解釈される。 ※2 「`」(バッククォート」を使うRDBMSは、MySQLだけかも知れません。 他の特殊な例としては、SQL ServerやMS-ACCESSでは、「"」に加え、「[ ]」を使います。 ※ 文字定数は、「'」(アポストロフィー)で囲みます。 これに加え、MySQLを非ANSIで使う場合は、「"」で囲んだ場合、名前でなく、文字定数と解釈されるので注意が必要です。

kisoyasa
質問者

お礼

ご丁寧に、ありがとうございます。感謝しております。 知識がないため、もしできましたら、教えていただけないでしょうか。 MySQLでは「表名、列名、別名が日本語の場合は`で、アルファベットなど半角英数字のときは"で囲わなくてはいけない」という意味なのでしょうか。 申し訳ありません。 どうか、よろしくお願いいたします。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

MySQLの場合バッククオートですよ というか日本語名はトラブルの元になりますので `kingaku`でもかまわないので半角英字にすることを強くおススメします どぉ~しても2バイト文字を使わなくてはならない理由があるのであれば、 トラブル覚悟で使ってくださいね

kisoyasa
質問者

お礼

さっそくご回答いただき感謝しております。 「エイリアスはバッククォート」ということがわかりました。 やはり、カラム名でも日本語は危険なんですね? ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

原則バッククォーテーションだと記憶していますが、出展は覚えがありません。 そもそもダブルクォーテーションをSQLで使うということは、あまり きいたことがありませんね。 値はシングルクォーテーション、テーブルやフィールドやエイリアスには バッククォーテーションという切り分けが妥当かと。 さらに根本的な話しをすると、エイリアスに日本語をつかうのはトラブルの 原因になるので賛成できません。

kisoyasa
質問者

お礼

さっそくご回答いただき感謝しております。 「値はシングルクォーテーション、テーブルやフィールドやエイリアスにはバッククォーテーション」が常識だということを知りませんでした。 また、テーブル名は問題あっても、カラム名なら日本語でもだいじょうぶだろうと、たかをくくっていました。 ありがとうございました。

関連するQ&A