web-dev-qa-db-ja.com

MySQLDBの列名のハイフン

この質問は以前に回答されたことがあるかもしれませんが、私はそれを見つけることができませんでした。

列名にハイフンが含まれている2/3年前のMySQLデータベースを使用しています。 Javaコードからこれらの名前を使用しようとすると、名前がハイフンで壊れているため(たとえば、air_portがairになります)、見つかりません。コード内でハイフンをアンダースコアに置き換えてみました。 DBはそれらを同等に扱うかもしれませんが、それは機能しません。

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

21
euphoria83

名前を `back-ticks`で囲みます

41
dar7yl

列名にハイフン(-)またはアンダースコア(_)が含まれていますか?

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

問題の性質に応じて、使用できるいくつかの異なるアプローチがあります。

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

これらはどれも優れたソリューションではありませんが、開始する必要があります。幸運を!

5
Robby Slaughter

データベース名のハイフンも適切ではありません。しかし、バッククォートのトリックでそれらを使用することができます `

`name-with-hyphen`
3
Gaston

列名にハイフンを使用しないことをお勧めします。 JOINステートメントで大きな問題が発生し、ハイフンが大きな問題を引き起こしました。バックティックで名前をエスケープしても機能しませんでした。

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

2
Hexodus

Pre-ca_dbという名前のデータベースを作成する必要がありました。

私は問題を解決しました

create database `pre-ca_db`;

幸運を!

1
Rodolfo Velasco

このエントリ MySQLフォーラムでは、問題が発生している可能性があります。ただし、列名ではなくデータを参照していると思います。

This 「やらないで」と言います。それがどれほど権威があるのか​​わからない。

0
duffymo