
お世話になっております。
マニュアルやネットで検索を試みたのですがわからず、困っております。
できましたら、どなたかお助けいただけないでしょうか。
カラム名に付けるエイリアス(別名)は " " で囲わなくてはいけないでしょうか。
例: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モードで使っている場合、「"」も文字定数を指定する場合に
使うので注意が必要。
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 …
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で使う場合は、「"」で囲んだ場合、名前でなく、文字定数と解釈されるので注意が必要です。
ご丁寧に、ありがとうございます。感謝しております。
知識がないため、もしできましたら、教えていただけないでしょうか。
MySQLでは「表名、列名、別名が日本語の場合は`で、アルファベットなど半角英数字のときは"で囲わなくてはいけない」という意味なのでしょうか。
申し訳ありません。
どうか、よろしくお願いいたします。
No.1
- 回答日時:
原則バッククォーテーションだと記憶していますが、出展は覚えがありません。
そもそもダブルクォーテーションをSQLで使うということは、あまり
きいたことがありませんね。
値はシングルクォーテーション、テーブルやフィールドやエイリアスには
バッククォーテーションという切り分けが妥当かと。
さらに根本的な話しをすると、エイリアスに日本語をつかうのはトラブルの
原因になるので賛成できません。
さっそくご回答いただき感謝しております。
「値はシングルクォーテーション、テーブルやフィールドやエイリアスにはバッククォーテーション」が常識だということを知りませんでした。
また、テーブル名は問題あっても、カラム名なら日本語でもだいじょうぶだろうと、たかをくくっていました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLiteでINSERT OR UPDATE
-
差し込み後、元データを変更し...
-
for whichの使い方
-
特定の文字列で列を区切るには?
-
ソフトバンクの無料着うたのお...
-
SQLで列名を変数にできないでし...
-
SQLで特定の項目の重複のみを排...
-
複数アドインプログラムをひと...
-
一度のsqlで値を取得するには
-
ある条件の最大値+1を初番する...
-
Outlook 送受信エラー
-
誰か教えてください
-
IDの欠番
-
UWSCでMOUSEORG関数が上手く処...
-
php+mysqlで複数選択削除について
-
この意味の違いを教えてくださ...
-
エクセルの関数について教えて...
-
Excel VBA ADODB
-
VMwareがCDドライブを認識する...
-
OSPFのDRの選出基準について シ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本語のエイリアスは" "で囲...
-
コマンドプロンプトでデータを...
-
CONCAT以外で文字列連結できますか
-
~以上~未満の指定の方法
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
特定の文字列で列を区切るには?
-
Outlook 送受信エラー
-
SQLで特定の項目の重複のみを排...
-
外部参照してるキーを主キーに...
-
1、Rstudioで回帰直線を求める...
-
カーソル0件の時にエラーを発生...
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
SELECT 文 GROUP での1件目を...
-
列のヘッダーを含めるのをデフ...
-
INSERT文でフィールドの1つだ...
-
SQLServerで文字列の末尾からあ...
おすすめ情報