2 つのデータベースがあり、CHAR 列を含む既存のテーブルをデータベース A からデータベース B に転送したいと考えています。
データベース A は Oracle 9i で、エンコーディングは WE8ISO8859P1 で、CHAR(1 char) 型の列が少なくとも 1 つあるテーブル「foo」が含まれています。データベース A はサード パーティのセットアップの一部であるため、テーブルを変更できません。
データベース B は私自身の Oracle 10g データベースであり、さまざまな理由から AL32UTF8 エンコーディングを使用しており、このデータベースに foo をコピーしたいと考えています。
データベース B からデータベース A へのデータベース リンクをセットアップします。次に、次のコマンドを発行します。
* select としてテーブルバーを作成 * from #link#.foo;*
データはうまくコピーされますが、列の型を確認すると、CHAR(1 文字) が CHAR(3 文字) に変換されていることに気付き、データベース B のデータをクエリすると、すべてスペースが埋め込まれます。 .
水中のどこかで、オラクルは自分のバイトと文字を混同していると思います。CHAR(1 byte) は CHAR(1 char) などとは異なります。私はそれについてすべて読みました。
データ型がパディングされた CHAR(3 文字) に変わるのはなぜですか? Oracle がこれを行うのを止めるにはどうすればよいですか?
編集: Oracle 9 と 10 の 2 つの特定のパッチレベル間で CHAR を転送する必要があるようです。これは実際にはバグのようです。わかり次第、更新を投稿します。その間: 私が説明したようにデータベース間で CHAR を移動しようとしないでください。VARCHAR2 は正常に動作します (テスト済み)。
編集 2:答えを見つけてここに投稿しました: Oracle DBLINK をコピーするときに Char(1) が Char(3) に変わるのはなぜですか? 私の問題は解決されたので、残念ながら私は自分の答えを受け入れることができません。