2009-05-19 88 views
16

この質問に回答することができましたが、私はそれを見つけることができませんでした。MySQL DBのカラム名のハイフン

私はカラム名にハイフンを持つ2/3年前のMySQLデータベースを使用しています。 Javaコードからこれらの名前を使用しようとすると、名前がハイフンで区切られます(例:air_portが空気になる)。したがって、名前は見つかりません。私はDBが同じように扱うかもしれないが、うまくいかないことを期待してコード内でハイフンを置き換えてみました。

ハイフンをエスケープするにはどうすればよいですか、またはこれらの列にどうやってアクセスできますか?これは使用されている文字セットの問題かもしれませんか?

答えて

33

`内の名前を囲み、MySQLのフォーラムで、`

0

This entryをバックティックあなたは問題があるかもしれないことを示唆しています。しかし、私はそれが列名ではなくデータを参照していると思います。

Thisには「しないでください」と記載されています。それがどれほど権威あるのか分かりません。

4

カラム名にハイフン( - )またはアンダースコア(_)がありますか?

ハイフンは大きな問題です。なぜなら、列名を変数にマッピングすると、ほとんどの言語は変数名の中にハイフンを持つのが好きではないからです。おそらく、名前が列名に基づいている変数またはオブジェクトを自動的に生成するJavaライブラリの1つを使用しています。

は、問題の性質に応じて、あなたが使用できるさまざまなアプローチのカップルがあります:

  1. ALTER TABLEを使用して、すべての列の名前を変更します。これが参照整合性やデータベースに依存するその他のアプリケーションに影響する可能性があることを意識してください。それが何を意味するのかわからないなら、それをしないでください。
  2. 「より良い」列名を使用して、必要な表を簡単に再作成できるSQLビューを作成します。これはあまり効率的ではありませんが、あなたが望むものを手に入れることができます。
  3. SELECTステートメントを実行してクエリ内の列の名前を変更する場合は、ASキーワードを使用します。

これらのどれも素晴らしい解決策ではありませんが、始めてみるべきです。がんばろう!

2

データベース名のハイフンも良くありません。しかし、あなたは、私が前ca_dbという名前のDBを作成する必要がありました `

`name-with-hyphen` 
0

バッククォートのトリックでそれらを使用することができます。

私は

create database `pre-ca_db`; 

幸運の問題を解決!

0

カラム名にハイフンを使用しない方が良いです。私は、ハイフンが大きな問題を引き起こしたJOINステートメントに大きな問題を抱えていました。バックティックの名前をエスケープしても動作しませんでした。

カラム名をアンダースコアを使用するように変換します。これは、最も安全な方法です。

関連する問題