プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。
マニュアルやネットで検索を試みたのですがわからず、困っております。
できましたら、どなたかお助けいただけないでしょうか。

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

A 回答 (5件)

#3、#4回答者です。



特に日本語の名称の場合を、知りたかったのですよね。
もう少し、コンパクトにまとめます。

(1)表名、列名、別名などの名前に、予約語と同じキーワードを使ったり、
 一部の特殊記号を使う場合は、「`」や「"」で名前を囲む必要がある。

(2)日本語の名前は、(1)に該当しないので、「`」や「"」で名前を囲む必要はない。

(3)プロジェクト等で名前を「`」や「"」で囲む規定になっている場合は、以下の点に
 注意。
 (a)MySQLサーバの使用モードで、使う記号が異なっている。
 (b)標準SQLや他の主要なRDBMSとは、使う記号が異なっている。

  MySQLの非ANSIモード(MySQLの構文)=MySQLのディフォルト環境
  →「`」(バッククォート)で囲む

  MySQLのANSIモード(標準SQLの構文)
  →「`」または「"」(ダブルクォーテーション)で囲む

  標準SQLや他の主要なRDBMS
  →「"」で囲む

(4)「'」(シングルクォーテーション)は、文字定数を指定する場合に使う。
 MySQLを非ANSIモードで使っている場合、「"」も文字定数を指定する場合に
 使うので注意が必要。 
    • good
    • 0

#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 …
    • good
    • 0

表名、列名、別名などの名前に、予約語や一部の記号(※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で使う場合は、「"」で囲んだ場合、名前でなく、文字定数と解釈されるので注意が必要です。
    • good
    • 0
この回答へのお礼

ご丁寧に、ありがとうございます。感謝しております。

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

お礼日時:2007/10/16 00:34

MySQLの場合バッククオートですよ



というか日本語名はトラブルの元になりますので
`kingaku`でもかまわないので半角英字にすることを強くおススメします

どぉ~しても2バイト文字を使わなくてはならない理由があるのであれば、
トラブル覚悟で使ってくださいね
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2007/10/14 23:44

原則バッククォーテーションだと記憶していますが、出展は覚えがありません。



そもそもダブルクォーテーションをSQLで使うということは、あまり
きいたことがありませんね。
値はシングルクォーテーション、テーブルやフィールドやエイリアスには
バッククォーテーションという切り分けが妥当かと。

さらに根本的な話しをすると、エイリアスに日本語をつかうのはトラブルの
原因になるので賛成できません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/14 23:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A