• ベストアンサー
  • すぐに回答を!

mysqlのフィールド名

テーブルを作成しようとしたとき、フィールド名にピリオドが入るとエラーが出ます。 例: Create table tableA ( Idx MEDIUMINT, 0hr DECIMAL(6,2), 1hr DECIMAL(6,2), 1.5hr DECIMAL(6,2), 2hr DECIMAL(6,2) ); ERROR 1060 (42S21) at line 1: Duplicate column name '5hr_1st' フィールド名にピリオドは使えないのでしょうか? よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1
  • taskuni
  • ベストアンサー率71% (49/69)

参考URLを見る限りカラム名にはピリオドOK見たいですね。 引用符でかこったらいけるかも。 Create table tableA ( Idx MEDIUMINT, '0hr' DECIMAL(6,2), '1hr' DECIMAL(6,2), '1.5hr' DECIMAL(6,2), '2hr' DECIMAL(6,2) );

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/legal-names.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

taskuni様 どうもありがとうございました。 おかげでエラーなくテーブルを作成することができました。

その他の回答 (4)

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

#3です。 見解の相違なので、おそらく意見の一致にはいたらない とは思いますが、あえて一方的に意見だけいわせてもらう と、例えば使えるからと言って安易にテーブル名に 2バイト文字をつかうのは、推奨外のはずです。 おなじように明らかに障害の種になるような文字を 意図的に使うことは自分の首をしめ、さらに グループワークなどでコンセンサスを得るには 不向きなため標準的でないという表現を用いました。 ポリシーをもって異を唱えるかたに同意してほしい とは思いませんが、本件のように問題解決につまづく ような質問者の方にはあきらかに「推奨外」だと 思います。 わたしは例文をだすときにも必ず「`」で囲んで 誤解が生じないように書いていますが、 解説書によっては引用符をつけないものも多々ある ようですので、ケアレスミスにつながるようなものを 看過するのは得策ではないという持論です。

共感・感謝の気持ちを伝えよう!

  • 回答No.4

「.」(ピリオド)に限らず、「-」(マイナス)や 「 」(空白)、予約語と同じ名前を、表名、列名に 使う場合は、引用符(一般的には「"」。MySQLでは「`」)を使います。 英語風の表名や列名を考えた場合、予約語とぶつかって しまうのは珍しいことではなく、RDBMSメーカーの中 には予約語と重ならないように引用符で囲むように推奨 しているところもあります。 #3の回答にあるような、「標準でできないものを無理 やり使う」には当たりません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

chukenkenkou様 どうもありがとうございました。 いろいろ勉強になりました。

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

というか、標準でできないものを無理やり使う くらいなら使わないように心掛けたいものです。 ケアレスミスによるバグの原因ともなりかねません。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • potok
  • ベストアンサー率37% (20/53)

No.1の方の補足で。 参考URLには以下のようにあります。 > 識別子が予約語である場合や、識別子に特殊文字が含まれている場合は、 > 引用符として使用したバッククォート(「`」)文字でその識別子を > 必ず囲む必要があります。 というわけで「`」でいけるはずです。 ちなみに「a.a」とかなら特に囲まなくてもいけますね。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • MySQLのfield数の上限について

    MySQLでfieldを2916個作ろうと思ったのですが、上限が1000個なのか、1001個目を作ろうとすると下のようなエラーが出ます。 ERROR 1005 (HY000): Can't create table 'features.#sql-1664_18' (errno: 139) featuresというのはデータベース名です。上限をなくす、または大きくする方法があれば教えて下さい。よろしくお願いします。

  • MySQLからフィールド名のリストを取り出し、一部のフィールド名を除外したい場合

    PHP + MySQLにて テーブルからフィールド名だけを取得し、さらに一部のフィールド名を除外したいです。 レコードじゃないのでis not構文は使えませんでした。 何かいい方法があれば教えてください。 $sql = "select * from table"; //tableテーブルからフィールド名を取り出し $rs = mysql_query($sql); $fields = mysql_num_fields($rs); $column = array(); for ( $i=0; $i<$fields; $i++ ) { $column[$i] = mysql_field_name($rs, $i); }

    • ベストアンサー
    • MySQL
  • MySQLのUNIQUE INDEXとINDEX

    MySQLのUNIQUE INDEXとINDEXの使い分けで質問があります。 UNIQUE INDEXは、社員番号や学籍番号など重複がないものに対して使われ、 INDEXは名前のように重複が想定されるものに対して使われるのでしょうか? また、複数のカラムに同一のインデックスをつける場合、 CREATE INDEX idx_名前 ON 社員(氏,名) と言う感じになりますが 例えばこんなコード CREATE INDEX idx_名前 ON 社員(氏) and CREATE INDEX idx_名前 ON 社員(名) これはエラーになるんでしょうか?

    • ベストアンサー
    • MySQL
  • テーブルを作ろうとしたら。

    下記のようなエラー文が表示されます。 NOTICE: CREATE TABLE will create implicit sequence 'テーブル名とフィールド名をくっつけたような名前' fo r SERIAL column 'テーブル名.フィールド名' NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'テーブル名_pke y' for table 'テーブル名' このデーターベースには他にもテーブルがありますが、 名前が主キーで名前が同じものがあるからエラーがでると思い、名前を変更して実行しましたが、同じような エラーがでました。 テーブル名とフィールド名をくっつけたような名前はもともとなかったものなのですが、実行後にデータベースに作成されました。 どなたかわかる方がいたら、ご教授お願いいたします。

  • 【MYSQL】フィールド名の変更(半角→全角)について

    フィールド名の変更(半角→全角)について ただいまmysqlを勉強中の初心者なのですが、 入門書を見ながら試験的に作ったテーブルのフィールド名を変更しようとしています。 テーブル名 tbl_employee 元フィールド名 「code」 型 varchar(40) 新フィールド名 「社員コード」 型 varchar(40) ALTER TABLE tbl_employee CHANGE code '社員コード' VARCHAR(40); とか ALTER TABLE tbl_employee CHANGE code 社員コード VARCHAR(40); とか ALTER TABLE tbl_employee CHANGE code '社員コード'; とか ALTER TABLE tbl_employee CHANGE code 社員コード; とか 一通り試してみたのですが動かず… ちなみに「社員コード」ではなく半角で「syain_code」という名前に変更することは出来ました。 全角文字だけがシンタックスエラーになります。 何が原因か分かる方いらっしゃいましたら教えてくださいませ。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • フィールドの削除でつまずいています。

    フィールドの削除でつまずいています。 Aマシン VineLinux Bマシン RedHat9 同じデータを使っています。データベースもPostgreSQLです。 Aで、alter table test_table drop column test_field;でエラーが発生し Bでは何のエラーも無く実行できました。 考えられる原因は何でしょうか? ちなみに、 update test_table set test_field = null;としています。 SQLの知識が乏しいので、基礎的なことを忘れているかもしれません。

  • UNIQUEをつけたときのINDEXテーブル

    テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか? 具体的には、ユニークなカラムidを持つテーブルtableA create table tableA( id INTEGER UNIQUE, some_column INTEGER ); を作ったあとで、そのidにあらためて CREATE INDEX id ON tableA (id); と、インデックスを張る必要があるのでしょうか。 よろしくお願いします。

  • AUTO_INCREMENTのあるテーブルにinsertできません(長文)

    mysql5.0.27(RedhatLinux 9)です。 属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。 Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。 状態をまとめると、以下のようになります。 ・下記のテーブル定義で、テーブルは普通にcreateできた。 ・descで確認しても、ちゃんとテーブルはできているよう。 ・下記のinsert文で、その下のエラーメッセージが出て、データを登録できない。 ・どうみても、コラム数は合っている(と思う)。 ・下記のテーブル定義の属性数を適当に減らす(id, item1, item4, item6くらいにする)と、エラーが出ずデータがちゃんとinsertできる。 私はなにか、とんてもない勘違いをしているのでしょうか?かなりの時間試行錯誤しているのですが、一向にわかりません。。。 ===== テーブル定義 ===== CREATE TABLE hoge ( id MEDIUMINT UNSIGNED AUTO_INCREMENT NOT NULL, item1 VARCHAR (64) NOT NULL, item2 VARCHAR (64) NOT NULL, item3 VARCHAR (32) NOT NULL, item4 VARCHAR (64), item5 VARCHAR (64), item6 VARCHAR (16) NOT NULL, CONSTRAINT PK_HOGE PRIMARY KEY (id) ) type=innodb; CREATE INDEX IDX_HOGE_1 ON hoge(item1); CREATE INDEX IDX_HOGE_2 ON hoge(item2); CREATE INDEX IDX_HOGE_3 ON hoge(item3); CREATE INDEX IDX_HOGE_4 ON hoge(item4); CREATE INDEX IDX_HOGE_5 ON hoge(item6); ===== descの出力 ===== +---------------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------+-----------------------+------+-----+---------+----------------+ | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment | | item1 | varchar(64) | NO | MUL | | | | item2 | varchar(64) | NO | MUL | | | | item3 | varchar(32) | NO | MUL | | | | item4 | varchar(64) | YES | MUL | NULL | | | item5 | varchar(64) | YES | | NULL | | | item6 | varchar(16) | NO | MUL | | | +---------------------+-----------------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) ===== insert文 ===== insert into hoge (item1, item2, item3, item4, item5, item6) values ( 'data1','data2', 'data3', 'data4', 'data5', 'data6'); ===== エラーメッセージ ===== ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1 長文大変申し訳ありません。よろしくお願いします。

  • テーブル作成でエラーが出てきます。

    こんにちは。 いつもお世話になっております。 テーブルを作っていたのですが、 ERROR 1060: Duplicate column name というエラーが帰ってきてしまいます。 予約語とかぶっているフィールド名でもないし、 何が悪いのかわからなくって・・・。 どうかご指導よろしくお願いいたします。

    • ベストアンサー
    • MySQL