• 締切済み

データベースで①などの丸囲み文字をINSERTする

ORACLEで①などの丸囲み文字をINSERTすると ? でINSERTされ、文字化けしています。 また、Symfowareというデータベースでも同様です。 どちらのデータベースでもよいのですが ①などの文字を文字化けせずに INSERTする方法をご教授ください。

noname#258812
noname#258812
  • Oracle
  • 回答数3
  • ありがとう数0

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.3

JA16EUCということで文字化けの原因は判明したようですが、データベース構築時の要件検討漏れか、稼働開始後の要件変更でしょうか。 対応方法として考えついたのはこれくらいです。 [案A] ①~⑳を(1)~(20)に変換してからデータベースに格納する。データベースから取り出すときには丸囲み数字に戻す変換を行わない(元々(1)だったデータと区別がつかないから)。丸囲み数字以外の機種依存文字には対応しない(データベース格納時に?に変換)。 [案B] ①~⑳を〓01~〓20に変換してからデータベースに格納する。元データに〓が含まれる場合は〓00や〓〓に変換する。データベースから取り出すときには逆変換を行う。丸囲み数字以外の機種依存文字にも対応する必要があるなら、同様に〓数字2桁の形にマッピングして変換する。 [案C] 対応しなければいけない機種依存文字が多すぎる場合は、データベースの文字コード設定をAL32UTF8などに変更する。EUC-JPでは2バイトで表現されていた漢字がUTF-8ではほとんどの場合3バイトになるなど、影響が非常に大きいので最後の手段。 まずは、データベースに格納する必要があってJA16EUCに含まれない文字が丸囲み数字以外でどれだけあるのか、要件を確認するところから始めてください。㈱、㊤、Ⅷ、㍼、﨑(たちざき)などの文字は必要ですか。

noname#258812
質問者

補足

ありがとうございます。全unicode変換にて 登録 エンコード 選択 デコード を検討してますが、まだ逃げ道はあるかもしれないので、Oracleデータベース有識者の降臨を待ちます。 ここまで、ご協力ありがとうございました。

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.2

すみません、データベースのことは詳しくないので書けるのは一般論だけです。 丸囲み数字が?に化けるということは、丸囲み数字を使える文字コードから丸囲み数字を使えない文字コード(例:Shift_JIS)への変換がどこかで起こっていると考えるのが自然です。 データベースの文字コードの設定はどうなっていますか。不適切な文字コードを指定しているとデータベースに保管する段階で文字化けする可能性があります。 別の可能性として、データベースには正しく保管されているけれどそれを取り出して表示する段階で文字コードの変換が起こって文字化けしていることも考えられます。 データベースに格納する前のデータの文字コードや、データベースから取り出したデータを出力するときに使用している文字コードは何ですか。

noname#258812
質問者

補足

データベースの定義変えるのは、影響デカすぎるからダメですと言われ、 しかも、まさかの、JA16EUCでした。 このデータベースに①②みたいな丸数字INSERTとか、無理に決まってるのですが‥ Javaアプリケーション側に、変換ロジック組み込む‥ぐらいしか思いつかないけど、あまりに非現実的です。 このようなケース皆さまどうされてるのか気になります。 機種依存文字は、諦めるしかないのでしょうか。

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

丸囲み数字や㈱のような文字はかつて機種依存文字と呼ばれ、文字化けの原因となっていました。 質問者さんの環境ではデータの入出力のどこかの段階で文字コードの変換が発生していて、その際に丸囲み数字を含まない文字集合・文字コードを経由してしまっているのだと思われます。 例を挙げるとJIS X 0208のShift_JISには丸囲み数字は含まれていません。 もし文字コードの変換時にShift_JISを指定している部分があれば、それをMS932に変更するなどの方法で文字化けを回避できるかもしれません。

noname#258812
質問者

補足

すみません、説明足りないのかもしれません。 デバッグでデータベースにINSERTする直前まで文字化けしてないことを確認しております。 OracleのINSERTの処理で文字化けしております。 データベースが原因なのは確実なところまでは判明してます。 OracleのINSERTで、まるつき数字が文字化けせずに登録できる方法が知りたいです。

関連するQ&A

  • 囲み文字

    囲み文字で特に数字の21から上の数字の丸囲いを作る方法をご教授ください。20以下はIMEパッドで利用しています。

  • 囲み文字

    wordで、囲み文字20以上を出来るように、する方法があれば、お教えください。 (20)

  • 文字の囲み線の太さを変えることは出来ますか?

    文字の囲み線を使って空欄補充の問題を作っていますが,囲み線をもう少し細くできると体裁が良くなります。囲み線の太さを変更することはできないのでしょうか?

  • 文字囲み?

    文字囲み (1)「春 夏 秋 冬」と間に空白を入れながら入力 (2)「春」に文字囲みを設定、同じく「夏」「秋」「冬」に文字囲みを設定 (3)「春」と「夏」の間の空白を範囲選択(ドラッグします) (4)フォントサイズを1に設定、同じく「夏」と「秋」の間の空白と「秋」と「冬」の間の空白も同じようにする ↑面白い文字囲みとして、紹介があったのですが、この中で、(2)の「春」に文字囲みを設定する、ということが分かりません。ので、 先に進めません。分かる方がいらしたら、教えてください。

  • DBで大文字小文字を区別せずINSERTする方法

    データベースに関する質問です。 現在、学校でデータベースを使用したシステムを開発しています。 データベースは主にPostgreSQLを使用しています。 データをINSERTする際に大文字小文字を区別せず、 同じ文字列であるかどうかチェックする方法はありますか? たとえば、「abc123」と「aBc123」を同一とみなし INSERTできないようにしたいです。(主キーのため) システム側ではなく、できればデータベース側で判定を行いたいです。 宜しくお願い致します。

  • 21以上の囲み文字を入力するには?

    みなさん、こんにちは。 エクセルならアドインやオートシェイプを 使って21以上の囲み文字が出来るのですが、 市販の見積書ソフトを使っていて21以上の 囲み文字を入力する必要が出てきました。 何か方法はありますでしょうか、ご教授お 願いいたします。 画像で作って貼付け、という方法は使えま せん。 PC環境は、 WindowsXPHome IME2002 です。よろしくお願いいたします。

  • 文字化け

    ORACLE(UNICODE)に対し、 SQL*PLUSから、(test.sql等)ファイルから insert文で'(1)'とう文字を入力しようとすると、 文字化けが発生します。 1)ORACLEにUNICODEで'(1)'という文字は登録可能でしょうか? 2)もし可能なら、どのような方法で可能でしょうか?(SQL*PLUSで) 以上、お願い致します

  • バッチファイルで、データベースにデータのインサートは可能?

    みなさんこんにちは 今バッチファイルを作成しております。 私としては、こんなバッチファイルを組みたいと思っています。 ■あるデータ(CSVやエクセル形式)のファイルを、データベース(MSアクセスやオラクル)にインサートする。 バッチファイルで、このような事が実現可能なのか?と 言う疑問と、やり方はどのようにすればよいのか?です。 もし参考になるサイトなどありましたら、教えてください。 探したのですが、見つからなかったので・・・・ よろしくお願いします。

  • INSERTにて

    SQLServer初心者です。 INSERTにて、値に外字の文字化け?を、 (例えば『・_』みたいな。) セットするとINSERTエラーになります。 解決策はありますでしょうか? ちなみに、VB6.0でプログラミングしております。

  • 多重insertについて

    お世話になります。 MySQLの経験はありますが、Oracleは初心者です。 Oracleで「多重insert」を行いたいと思っています。 この表現が正しいか分かりません、一度のinsert文で 多数のレコードを追加したいと思っております。 MySQLですと、 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') のように、()と,で区切って一度の複数のレコードを インサートできますが、Oracleでは出来ませんでした。 Oracleで同様の動作を行う方法はあるのでしょうか? お手数をおかけ致しますが、よろしくお願い致します。