【先着1,000名様!】1,000円分をプレゼント!

お世話になっております。
Oracle10g、11gで、できれば日本語の表名、列名を使用しようと思っております。検索してみると、9iあたりでは問題があるようですが、10g、11gでは該当の記述を見つけることができませんでした。
10g、11gでは、表名や列名に日本語を使っても問題はないでしょうか。
関連した情報の場所等をお教えいただければ幸いです。
どうか、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

 テーブルを使用するのも作成するのも面倒がありますが、構文上の問題はありません。

というのが、答えになるでしょうか。
 表名や列名に日本語文字を使用する場合は、名前を" "で囲う必要があります。制約はただこれだけです。(マニュアルに記載があります。)
 ただこれだけのことなので、自分で開発したデータベースを、自分で作成したアプリで利用する場合には、何の問題もありません。ただし、日本語とシングルバイトの英文字が混在する場合は注意してください。この場合、英文字の方の大文字小文字をきちんと区別する必要があります。""で囲っていない場合は、総ての名前は大文字変換されて使用されるのですが、囲った場合はこの変換がないからです。

 それより、やっかいごとは外からやってきます。
 データベースの開発・メンテナンスにsql plusやEMだけを利用しているなら大丈夫ですが、サードパーティー製のソフトを利用している場合は、そのソフトが日本語表名・列名を正しくサポートしていることが必要です。
 また、アプリケーションの作成の際に、ライブラリーなどを利用しているのであれば、これらも正しく日本語表名・列名に対応している必要があります。
 なぜなら、普通列名や表名を" "で囲うということはしないからです。囲うことによる副作用もありますから、ライブラリーやソフトが日本語文字が混在していることを正しく認識して、日本語の混じっている時だけ正しく" "で囲うという処理が必要で、これは、明らかに特殊な処理ですから。
 
 まぁ、今までの経験からすると、囲わなくても正しく動くことが多いです。が、正式に構文として明記されている以上、動く方が偶然であると認識しておくことは必要でしょう。特に、二バイト目のコードがASCIIコードの特殊文字の文字コードと同じになっているいくつかの文字あたりが鬼門になると思います。
 表名も列名もとっても見やすくなり、メンテナンスも楽になります。が、ある程度のリスクを抱えての選択であると言うことは意識しておく必要はあるでしょう。

 作法としてやって良いかどうかは、宗教論争の面がありますで、避けることにします。
    • good
    • 1
この回答へのお礼

mitoneko 様 ご回答いただき、ありがとうございました。
「自分で開発したデータベースを、自分で作成したアプリで利用する場合には、何の問題もありません。」という点。よく理解できました。私の場合は、おかげさまで安心して利用できます。
また、作法としては「宗教論争の面」があるということもわかり、勉強になりました。
的確な回答をいただき、感謝しております。ありがとうございました。

お礼日時:2010/02/01 22:15

> 表名や列名に日本語を使っても問題はないでしょうか


ダブルクォートすれば問題はないようです(結構面倒です)。

・参考サイト

http://homepage3.nifty.com/yamada_ken1/starthp/s …
http://www.shift-the-oracle.com/guideline/multib …

・OTN掲示板の参考スレッド

http://www.oracle.co.jp/forum/message.jspa?threa …

# 日本語の表名、列名の問題は宗教論争になりがちで……
    • good
    • 0
この回答へのお礼

dda167 様
いつも適切なご回答をいただき、感謝しております。
よく理解できました。
MySQLをやりましたときには、5Cコードの問題があり、日本語は絶対ダメと思っていたのですが、Oracleではダブルクォートで問題がない(Oracle内だけでは)のですね。
ありがとうございました。

お礼日時:2010/02/01 22:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q日本語のエイリアスは" "で囲う必要があるのでしょうか

お世話になっております。
マニュアルやネットで検索を試みたのですがわからず、困っております。
できましたら、どなたかお助けいただけないでしょうか。

カラム名に付けるエイリアス(別名)は " " で囲わなくてはいけないでしょうか。
例:SELECT a AS "金額;" FROM tb;
「エイリアスに特殊記号を含む場合 " "で囲わなければいけない」という話を聞いたような気がするのですが、やってみると特殊記号の場合でも、 " " でも ' ' や` `(バッククォート)でも問題なさそうなのですが。
もし、このあたりのことで情報があったら、お教えいただけるとありがたいのですが。
申し訳ありません。どうか、よろしくお願いいたします。

Aベストアンサー

#3、#4回答者です。

特に日本語の名称の場合を、知りたかったのですよね。
もう少し、コンパクトにまとめます。

(1)表名、列名、別名などの名前に、予約語と同じキーワードを使ったり、
 一部の特殊記号を使う場合は、「`」や「"」で名前を囲む必要がある。

(2)日本語の名前は、(1)に該当しないので、「`」や「"」で名前を囲む必要はない。

(3)プロジェクト等で名前を「`」や「"」で囲む規定になっている場合は、以下の点に
 注意。
 (a)MySQLサーバの使用モードで、使う記号が異なっている。
 (b)標準SQLや他の主要なRDBMSとは、使う記号が異なっている。

  MySQLの非ANSIモード(MySQLの構文)=MySQLのディフォルト環境
  →「`」(バッククォート)で囲む

  MySQLのANSIモード(標準SQLの構文)
  →「`」または「"」(ダブルクォーテーション)で囲む

  標準SQLや他の主要なRDBMS
  →「"」で囲む

(4)「'」(シングルクォーテーション)は、文字定数を指定する場合に使う。
 MySQLを非ANSIモードで使っている場合、「"」も文字定数を指定する場合に
 使うので注意が必要。 

#3、#4回答者です。

特に日本語の名称の場合を、知りたかったのですよね。
もう少し、コンパクトにまとめます。

(1)表名、列名、別名などの名前に、予約語と同じキーワードを使ったり、
 一部の特殊記号を使う場合は、「`」や「"」で名前を囲む必要がある。

(2)日本語の名前は、(1)に該当しないので、「`」や「"」で名前を囲む必要はない。

(3)プロジェクト等で名前を「`」や「"」で囲む規定になっている場合は、以下の点に
 注意。
 (a)MySQLサーバの使用モードで、使う記号が異なっている。
...続きを読む

Q日本語のテーブル名、カラム名の定義について

以前、IBMのオフコンでシステム開発を行っていた時期があります。 転職して今はネットワークエンジニアとしての仕事に就いておりますが、必要に迫られて、社内の部門システムの開発を始めようと考えております。

そこで、社内の販売管理の SQL Server のテーブル名、カラム名を確認してみると全て日本語で定義されております。 確固たる根拠はないのですが、どうしても違和感を覚えてしまいます。

今回の開発目的は、部門内のこまごました業務のシステム化で、顧客管理、グループ間の作業依頼や履歴管理等で、Visual Studio .NET 2003 + SQL Server 2000 を使って私一人で開発を行う予定です。 Windows フォーム、Web フォーム(ASP.NET)も利用予定です。

さて、前置きが長くなってしまいましたが、以前は、外資系の会社にいて日本語利用不可のシステム(データベース)でしたので、何も考える必要がなかったのですが、今回の開発を始めるに当たって SQL Server のテーブル名、カラム名の定義を日本語を行った場合の利点、欠点、考慮点等があれば教えて頂きたくて質問しました。

販売されている業務アプリやグループウェアの SQL Server のテーブルやカラム定義を見ても日本語は今まで見かけたことがないのですが、プロの開発者としてのご意見が伺えれば幸いです。

以前、IBMのオフコンでシステム開発を行っていた時期があります。 転職して今はネットワークエンジニアとしての仕事に就いておりますが、必要に迫られて、社内の部門システムの開発を始めようと考えております。

そこで、社内の販売管理の SQL Server のテーブル名、カラム名を確認してみると全て日本語で定義されております。 確固たる根拠はないのですが、どうしても違和感を覚えてしまいます。

今回の開発目的は、部門内のこまごました業務のシステム化で、顧客管理、グループ間の作業依頼や履歴管理等で...続きを読む

Aベストアンサー

日本語を使うメリット?
漢字を使えばビジュアル的に見て分かりやすい?という人もいます。漢字の方が短いTEXT長で多くのことを伝えられる。
他の人にメンテナンスを頼む場合、初めて見たテーブル構成でも理解しやすい。

私の意見としては
DB名・TABLE名・項目名にあまり漢字は使わないほうです。
個人のデータベースなら良いとしても企業内のシステムで使うようなものであればDBの設計資料などをきちんと作るのが当然で設計資料等にこの項目はこの内容ですとちゃんと書かれているし書かれているべきだから。
項目名等を漢字にするメリットってあまり無いと思います。
この項目は何?となったら設計資料見れば済みますから。
設計資料を見ることを許していないフロントエンドを使う一般のユーザーにはバックエンドのDBの構成等が分からなくても関係ないですし。
SQLで日本語使うのめんどくさいのもありますけどネ。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QOracleで「文字が無効です」のエラーが出ます

Oracleで「文字が無効です」のエラーが出ます

JavaからOracleに接続して、SELECT文を発行していますが、何度試しても上記のエラーが出ます。
発行しているSELECT文を、SQLPlusから打ち込むとちゃんと実行できます。
何が悪いのか見当がつきません。
お知恵をお貸しください。
ちなみに、対象テーブルの項目はvarchar2とnumberだけの項目ばかりで、日本語は使ってません。
また、Oracle初心者です。

環境
端末:WindowsXP
Oracle:10g Express Edition ※文字コードはAL32UTF8
IDE:Eclipse3.5 ※設定-一般-ワークスペースのテキストファイルエンコードはUTF-8

Aベストアンサー

Java内で生成したSQL文を見ないとなんとも言えないけど。

Javaでリテラル吐き出して編集してますかね?
select UserID, UserName from mstUser where UserID = '001'; みたいな。
条件によって 001 の部分を変化させるような。


だったらJavaでシングルクォートを吐き出すところを二重にしてみるとどうかな?
ダブルクォートでは無いよ。二重に書くことでシングルクォート一個と解釈されればOKのはず。

そうしておかないとSQL文全体を文字列で扱うんだろうから、シングルクォートの対応が崩れる。

つくりとしては以下のように作成。
select UserID, UserName from mstUser where UserID = ''001''; みたいな。

SQL文を文字列変数に格納するんだろうから
'select UserID, UserName from mstUser where UserID = ''001'';'

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

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

MySQLのカラム名に日本語を使うか、英数字を使うかで迷っています。英数が無難だと思うのですが、日本語の方が簡潔で分かりやすい命名ができるので、もし大した問題が無ければ日本語を使おうと考えています。

そこで3点お伺いしたく存じます。

1. 日本の企業はMySQLのカラム名に日本語を使っているケースが多いのか、それとも英数字のみのケースが多いのか、最近の傾向をご教示頂けますか。統計は無いと思いますので、体感や自社ルールの場合等でも結構です。

2. 日本語を使うことでセキュリティホールができることは考えられますか。例えば、マルチバイト文字はSQLインジェクション対策をすり抜ける・・・等。

3. 自分なら日本語と英数字のどちらを使うか。理由も添えて頂けると幸いです。

当方の開発環境は、PHP(ver. 5.5.9) + MySQL(ver. 5.6.16)です。
お手数おかけしますが、ご教示お願い致します。

Aベストアンサー

(1)日本語を使うケースはほぼ100%ないですね

(2)セキュリティはあまり関係ないでしょう
カラム名を検索者がダイレクトに指定することはまずありえないので
カラム名の日本語でインジェクションが発生する可能性はほぼありません。
逆に万が一もしそういう仕組みを考えているならすぐ見直すべきです。

(3)上で否定しておいてなんですが・・・
自分でやる環境はほぼ日本語カラム名をつかっています。
他人を気遣う必要がなく迷惑をかけないなら日本語で十分です。

余談
日本語ではまるケースはいろいろ想定されます。
とくにMySQLのバージョンアップ、枯れたシステムの3.23系から5.0以上に
環境をシフトする際にかなりトラブリました。
システム周りの環境はは数年単位でかわっていくものです。
別環境に移行する準備を当初から想定しておかないと、かなり痛い目を見ます。

また、メンテナンスする際も、かならずしも日本語入力できる環境とは
限らないことから、日本語を利用することによるリスクは高めに想定しておく
必要があります。なんらかの日本語が入力できない状況で、データベースから
エクスポートをしようとしてはまるとか、ないことはないと思います。

バグやエラーなど一般的なトラブルの際にも、日本語に起因する問題なのか
そうでないのか、無駄にチェックが増えるので、デバグも不利になります。

全部ひっくるめて、自分でなんとかする覚悟と技量があるなら、日本語カラム名で
やるメリットはあるので、トライする価値はあるでしょう

(1)日本語を使うケースはほぼ100%ないですね

(2)セキュリティはあまり関係ないでしょう
カラム名を検索者がダイレクトに指定することはまずありえないので
カラム名の日本語でインジェクションが発生する可能性はほぼありません。
逆に万が一もしそういう仕組みを考えているならすぐ見直すべきです。

(3)上で否定しておいてなんですが・・・
自分でやる環境はほぼ日本語カラム名をつかっています。
他人を気遣う必要がなく迷惑をかけないなら日本語で十分です。

余談
日本語ではまるケースはいろいろ想定されま...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング