MySQL予約語名でカラム作成可能か

このQ&Aのポイント
  • MySQL予約語名でもカラムを作成することができるのか疑問です。
  • 予約語を使用したために起こる文法エラーの原因を調べていると、MySQL予約語名でもカラムを作成できることがわかりました。
  • 予約語による影響を受ける場合やどのような場合に影響を受けるのか、具体的な例や関連する情報を知りたいです。
回答を見る
  • ベストアンサー

MySQL 予約語名で、カラム作成できるでしょうか

■質問 ・MySQL予約語名でもカラムを作成できるのでしょうか? ■背景 ・文法エラーSQL文の原因を調べると、どうやら予約語を利用したためだと分かりました ・予約語と知っていたら初めから利用しなかったのですが、その名前で普通にカラムを作成できたので、てっきり使えるものだと思い込んでしまいました ■知りたいこと ・予約語を回避するには、ここをチェックするしかないのでしょうか? ▽MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い   http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html ・予約語による影響を受けるのはどんな時?(CREATEは関係ない?) 予約語によって異なる?

  • re97
  • お礼率80% (601/744)
  • MySQL
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 まぁ、使ってしまった予約語ならしかたがありません。そのカラム名を使う時は、'sikibetusi'のように、''で囲んであげてください。   >・予約語を回避するには、ここをチェックするしかないのでしょうか?  その通りです。ないしは、全部覚えるかですが・・・普通は、怪しげだなと思ったらチェックします。  バージョンによっても違いますから、ちゃんと新しいマニュアルでチェックします。 >予約語による影響を受けるのはどんな時?(CREATEは関係ない?) 予約語によって異なる?  パーサーの構文解析規則はちゃんと決まっているのですが・・・・あんな複雑な規則を全部評価して、影響があるかどうか判断するのは、お勧めしません。しかも、変わる可能性は極めて大だし。  全て影響があるものとして、予約語を識別子として使用した時は、必ず''で囲うというのが正解です。  本来は、テーブルを設計した時に、必ず予約語表で確認すべきです。特に、簡単な英単語は非常に危険です。予約語が全部英語であることを逆手に取ることも出来ます。そう。カラム名などの識別子は、全部日本語のローマ字表記にしてしまうんです。まぁ予約語とバッティングすることはありません。日本人ならちゃんと意味も通りますしね。

re97
質問者

お礼

回答ありがとうございました。 >パーサーの構文解析規則はちゃんと決まっているのですが・・・・あんな複雑な規則を全部評価して、影響があるかどうか判断するのは、お勧めしません。しかも、変わる可能性は極めて大だし >本来は、テーブルを設計した時に、必ず予約語表で確認すべきです。特に、簡単な英単語は非常に危険です ・大変参考になりました ・これからは、テーブル設計する際、必ず「予約語表で確認」するようにしたいと思います

その他の回答 (3)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

定義、使用すべてでバッククォート「`」で括れば使用は出来ます。 create table `create` ( dummy int ); ただし、お勧めはしません。ODBCなどで使う場合などがあると破綻するからです。

re97
質問者

お礼

回答ありがとうございました。 >定義、使用すべてでバッククォート「`」で括れば使用は出来ます >ただし、お勧めはしません。ODBCなどで使う場合などがあると破綻するからです ・アドバイスありがとうございました ・参考になりましたー

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.3

No2です。引用符の記号間違えました。  「'」ではなくて、「`」です。よく似てますが・・・=^・・;=  失礼しました。

re97
質問者

お礼

補足ありがとうございましたー

  • pa_cotta
  • ベストアンサー率43% (25/58)
回答No.1

バッククォート(`)で囲めば可能です。 が、わざわざ予約語をカラム名に指定してトラブルの種を増やすこともないでしょう。 どうしても予約語になってしまうような場合はprefixを付けるなどで対応したほうがいいかと思います。

re97
質問者

お礼

回答ありがとうございました。 >わざわざ予約語をカラム名に指定してトラブルの種を増やすこともないでしょう ・その通りなのですが、カラム作成できたので、てっきりイケるものだとばかり思い込んでしまいました…

関連するQ&A

  • My-SQLのUserと、予約文字列

    http://dev.mysql.com/doc/refman/4.1/ja/reserved-words.html 予約されている文字列はUser名として使えないのでしょうか? また大文字でも小文字でも区別はなく使えないのでしょうか?

  • 論理名とコメント構文(?)について

    ・論理名とコメント構文が分からないので、教えてください ■論理名 ・論理名は、内容を分かりやすくするために付ける日本語表記、と思っているのですが、そういう認識で合っているでしょうか? ・論理名は、どこに付けるのでしょうか? テーブル定義書などの設計書にだけ表記するのでしょうか? それとも、SQLの中で「論理名」を付ける場所は決まっているのでしょうか? ・MySQLのコメント内に、「論理名」を記述しても良いのでしょうか? ・「論理名」を付与する場合、一般的に、どこに記述するのか? SQLの中でも記述するのか? について、教えてください ■コメント ・「コメント構文」と、「COMMENT オプション」では、何が違うのでしょうか? ・SQLステートメントの構文解析とは、具体的に何を指すのでしょうか? ・両者の使い分け(どういう時にどちらを用いるのか等)について、教えてください ▽MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.5 コメント構文   http://dev.mysql.com/doc/refman/5.1/ja/comments.html >記述されたコメント構文はmysqldサーバによるSQLステートメントの構文解析に適用 ▽MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.8 CREATE TABLE 構文   http://dev.mysql.com/doc/refman/5.1/ja/create-table.html >カラムのコメントは、255文字の長さまでで COMMENT オプションで指定できます。コメントは SHOW CREATE TABLE と SHOW FULL COLUMNS ステートメントによって表示

    • ベストアンサー
    • MySQL
  • MySQLで日本語カラム名を使いたいのですが

    当方の質問に興味をもっていただいてありがとうございますm(__)m 当方未熟ながらJAVAプログラマーを職業にさせていただいておりまが、この度MySQLを使用した日記WEBサイトを構築することになりました。しかし、日本語カラム名を使用したく困っております。 環境はTomcat5.5、MySQL5.1(ベータ)、JDBCは5.1、Eclipseは3.2です。 カラム名を英数字にすれば至らぬ私の技量でも問題ない案件なのですが、オラクルしか使用したことのない私には未知の領域です。 日本MySQL協会の「徹底入門」、DBの「現場で使えるMySQL]等の書籍は網羅したつもりですが、どうにも問題解決策を見つけることができませんでした。 もし解決策をご存知の方がいらっしゃりましたらば、お手数ではありますがその方法を教えていただけないでしょうか? 私が悩んでいるのは「WEBアプリからDBにSQLを投げた際、SELECT 日本語 From テーブル とし、JAVA側で「getString(”日本語”)」が使えないことです。 JDBCそのものの問題なのでしょうか?? よろしくお願いいたします。

  • MySQLカラム名は日本語と英数字のどちらが良いか

    MySQLのカラム名に日本語を使うか、英数字を使うかで迷っています。英数が無難だと思うのですが、日本語の方が簡潔で分かりやすい命名ができるので、もし大した問題が無ければ日本語を使おうと考えています。 そこで3点お伺いしたく存じます。 1. 日本の企業はMySQLのカラム名に日本語を使っているケースが多いのか、それとも英数字のみのケースが多いのか、最近の傾向をご教示頂けますか。統計は無いと思いますので、体感や自社ルールの場合等でも結構です。 2. 日本語を使うことでセキュリティホールができることは考えられますか。例えば、マルチバイト文字はSQLインジェクション対策をすり抜ける・・・等。 3. 自分なら日本語と英数字のどちらを使うか。理由も添えて頂けると幸いです。 当方の開発環境は、PHP(ver. 5.5.9) + MySQL(ver. 5.6.16)です。 お手数おかけしますが、ご教示お願い致します。

    • ベストアンサー
    • MySQL
  • ロールバックできないステートメントについて

    こんばんは。 既存のテーブルのカラムを削除することになりまして、 以下の手順で変更をかけました。 環境:mysql_5.5 mysql>begin; mysql>alter table test_table drop column test_column; mysql>desc test_table; mysql>rollback; mysql>desc test_table; しかし、ロールバックをかけても元に戻らなかったのですが、 http://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.htmlhttp://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.html の記述にあるようにバージョン5.5でもalterでのロールバックは出来ないのでしょうか。 英語のサイトを見たのですが、ただしく訳せませんでした。 http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.htmlhttp://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html 回避方法があったら、教えてください。

  • MySQL5で、SUMした値を新たにカラムとして追加したビューを作成し

    MySQL5で、SUMした値を新たにカラムとして追加したビューを作成したいのですが、どういうSQLを書けばよいかわかりません。 今、Aというテーブルがあり、f1,f2,f3というカラムがあります。 このテーブルを元にvwAというビューを作成したいのですが、その際、f1でGroup Byしたf2のSUMをf2Keiというカラム名で追加し、最終的にf3とf2Keiという2つのカラムを持ったビューにしたいです。 create view vwA as select f3,select SUM(f2) as f2Kei from A GROUP BY f1 from A; と書いてみましたがエラーを返されました。 どのようなSQLを書けばよいか、ご教授ください。

  • テーブル作成でカラム名で配列を

    MySQLを勉強している初心者です、よろしくお願いします。 テーブル作成時、カラム名を配列を使ってできないものでしょうか? (data1 data2 data3 data4 とするのが面倒なのですが) CREATE TABLE table_name ( code int(6) , data1[100] int(10) , data2[50] varchar(20) , data3[20] varchar(25)); ERROR 1064:You have an error in your SQL syntax. となります。 また二次元配列はどのようにしたらよいのでしょうか? よろしくお願いします。

  • MySQL TIMESTAMP型は、UTCですか?

    MySQL5で、 TIMESTAMP型のカラムに格納されるのは、UTCでしょうか。 それともローカルタイムゾーンなのでしょうか? あるいは、設定による、のでしょうか? >TIMESTAMP カラムの値は、ストレージでは現在のタイム ゾーンから UTC へ、読み出しでは UTC からカレントのタイム ゾーンに変換します。 http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html と書いてあったのを見て、TIMESTAMP型のカラムに格納されるのは、UTC(日本時間-9)だ、と思ったのですが、 実際にカラムの中を確認してみると、その時点の日本時間が格納されています。 >TIMESTAMP 値は、現在のタイムゾーンから変換されて格納され、また検索された時に現在のタイムゾーンに再変換されながら、UTCに格納されます。 http://dev.mysql.com/doc/refman/5.1/ja/timestamp-4-1.html こちらでも、「UTCに格納されます」って書かれているのですが、 これは、「現在のタイムゾーンをそれぞれの接続ごとに設定した場合」に限っての話なのでしょうか? それとも、ストレージでは、って書かれているので、 ストレージのことが絡んでいるのでしょうか?(ストレージって何のことですか)

    • ベストアンサー
    • MySQL
  • MySQLのストアドプロシージャをJavaから使いたい

    MySQLのバージョン5から搭載されたストアドプロシージャをJavaから使いたいと考えています。 また、MySQLのストアドプロシージャの文法自体も知りたいです。 しかしまだWeb上の情報が少なく、困っています。 このような情報の載っているサイトをご存知の方がいたら教えていただきたいです。 (できれば日本語のサイトだとさらにありがたいです) もしくはサンプルを直接記述していただけないでしょうか。 環境は ・WindowsXP ・Java5 ・MySQL5 です。よろしくお願いします。 ちなみに公式サイトのページは知っています。 http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html ので、それ以外でお願いします。

  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP