• 締切済み

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

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

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1581/2304)
回答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% (1581/2304)
回答No.2

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

noname#258812
質問者

補足

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

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

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

noname#258812
質問者

補足

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

関連するQ&A