- 締切済み
データベースで①などの丸囲み文字をINSERTする
ORACLEで①などの丸囲み文字をINSERTすると ? でINSERTされ、文字化けしています。 また、Symfowareというデータベースでも同様です。 どちらのデータベースでもよいのですが ①などの文字を文字化けせずに INSERTする方法をご教授ください。
- Oracle
- 回答数3
- ありがとう数0
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- _kappe_
- ベストアンサー率68% (1522/2216)
JA16EUCということで文字化けの原因は判明したようですが、データベース構築時の要件検討漏れか、稼働開始後の要件変更でしょうか。 対応方法として考えついたのはこれくらいです。 [案A] ①~⑳を(1)~(20)に変換してからデータベースに格納する。データベースから取り出すときには丸囲み数字に戻す変換を行わない(元々(1)だったデータと区別がつかないから)。丸囲み数字以外の機種依存文字には対応しない(データベース格納時に?に変換)。 [案B] ①~⑳を〓01~〓20に変換してからデータベースに格納する。元データに〓が含まれる場合は〓00や〓〓に変換する。データベースから取り出すときには逆変換を行う。丸囲み数字以外の機種依存文字にも対応する必要があるなら、同様に〓数字2桁の形にマッピングして変換する。 [案C] 対応しなければいけない機種依存文字が多すぎる場合は、データベースの文字コード設定をAL32UTF8などに変更する。EUC-JPでは2バイトで表現されていた漢字がUTF-8ではほとんどの場合3バイトになるなど、影響が非常に大きいので最後の手段。 まずは、データベースに格納する必要があってJA16EUCに含まれない文字が丸囲み数字以外でどれだけあるのか、要件を確認するところから始めてください。㈱、㊤、Ⅷ、㍼、﨑(たちざき)などの文字は必要ですか。
- _kappe_
- ベストアンサー率68% (1522/2216)
すみません、データベースのことは詳しくないので書けるのは一般論だけです。 丸囲み数字が?に化けるということは、丸囲み数字を使える文字コードから丸囲み数字を使えない文字コード(例:Shift_JIS)への変換がどこかで起こっていると考えるのが自然です。 データベースの文字コードの設定はどうなっていますか。不適切な文字コードを指定しているとデータベースに保管する段階で文字化けする可能性があります。 別の可能性として、データベースには正しく保管されているけれどそれを取り出して表示する段階で文字コードの変換が起こって文字化けしていることも考えられます。 データベースに格納する前のデータの文字コードや、データベースから取り出したデータを出力するときに使用している文字コードは何ですか。
補足
データベースの定義変えるのは、影響デカすぎるからダメですと言われ、 しかも、まさかの、JA16EUCでした。 このデータベースに①②みたいな丸数字INSERTとか、無理に決まってるのですが‥ Javaアプリケーション側に、変換ロジック組み込む‥ぐらいしか思いつかないけど、あまりに非現実的です。 このようなケース皆さまどうされてるのか気になります。 機種依存文字は、諦めるしかないのでしょうか。
- _kappe_
- ベストアンサー率68% (1522/2216)
丸囲み数字や㈱のような文字はかつて機種依存文字と呼ばれ、文字化けの原因となっていました。 質問者さんの環境ではデータの入出力のどこかの段階で文字コードの変換が発生していて、その際に丸囲み数字を含まない文字集合・文字コードを経由してしまっているのだと思われます。 例を挙げるとJIS X 0208のShift_JISには丸囲み数字は含まれていません。 もし文字コードの変換時にShift_JISを指定している部分があれば、それをMS932に変更するなどの方法で文字化けを回避できるかもしれません。
補足
すみません、説明足りないのかもしれません。 デバッグでデータベースにINSERTする直前まで文字化けしてないことを確認しております。 OracleのINSERTの処理で文字化けしております。 データベースが原因なのは確実なところまでは判明してます。 OracleのINSERTで、まるつき数字が文字化けせずに登録できる方法が知りたいです。
関連するQ&A
- 文字の囲み線の太さを変えることは出来ますか?
文字の囲み線を使って空欄補充の問題を作っていますが,囲み線をもう少し細くできると体裁が良くなります。囲み線の太さを変更することはできないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- DBで大文字小文字を区別せずINSERTする方法
データベースに関する質問です。 現在、学校でデータベースを使用したシステムを開発しています。 データベースは主にPostgreSQLを使用しています。 データをINSERTする際に大文字小文字を区別せず、 同じ文字列であるかどうかチェックする方法はありますか? たとえば、「abc123」と「aBc123」を同一とみなし INSERTできないようにしたいです。(主キーのため) システム側ではなく、できればデータベース側で判定を行いたいです。 宜しくお願い致します。
- 締切済み
- PostgreSQL
- 21以上の囲み文字を入力するには?
みなさん、こんにちは。 エクセルならアドインやオートシェイプを 使って21以上の囲み文字が出来るのですが、 市販の見積書ソフトを使っていて21以上の 囲み文字を入力する必要が出てきました。 何か方法はありますでしょうか、ご教授お 願いいたします。 画像で作って貼付け、という方法は使えま せん。 PC環境は、 WindowsXPHome IME2002 です。よろしくお願いいたします。
- ベストアンサー
- Windows XP
- バッチファイルで、データベースにデータのインサートは可能?
みなさんこんにちは 今バッチファイルを作成しております。 私としては、こんなバッチファイルを組みたいと思っています。 ■あるデータ(CSVやエクセル形式)のファイルを、データベース(MSアクセスやオラクル)にインサートする。 バッチファイルで、このような事が実現可能なのか?と 言う疑問と、やり方はどのようにすればよいのか?です。 もし参考になるサイトなどありましたら、教えてください。 探したのですが、見つからなかったので・・・・ よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- INSERTにて
SQLServer初心者です。 INSERTにて、値に外字の文字化け?を、 (例えば『・_』みたいな。) セットするとINSERTエラーになります。 解決策はありますでしょうか? ちなみに、VB6.0でプログラミングしております。
- 締切済み
- SQL Server
- 多重insertについて
お世話になります。 MySQLの経験はありますが、Oracleは初心者です。 Oracleで「多重insert」を行いたいと思っています。 この表現が正しいか分かりません、一度のinsert文で 多数のレコードを追加したいと思っております。 MySQLですと、 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') のように、()と,で区切って一度の複数のレコードを インサートできますが、Oracleでは出来ませんでした。 Oracleで同様の動作を行う方法はあるのでしょうか? お手数をおかけ致しますが、よろしくお願い致します。
- ベストアンサー
- Oracle
補足
ありがとうございます。全unicode変換にて 登録 エンコード 選択 デコード を検討してますが、まだ逃げ道はあるかもしれないので、Oracleデータベース有識者の降臨を待ちます。 ここまで、ご協力ありがとうございました。