У меня есть 2 базы данных, и я хочу перенести существующую таблицу, содержащую столбец CHAR, из базы данных A в базу данных B.
База данных A — это Oracle 9i, имеет кодировку WE8ISO8859P1 и содержит таблицу «foo», по крайней мере, с 1 столбцом типа CHAR (1 char). Я не могу изменить таблицу в базе данных A, поскольку она является частью сторонней установки.
База данных B — это моя собственная база данных Oracle 10g, использующая кодировку AL32UTF8 по разным причинам, и я хочу скопировать foo в эту базу данных.
Я устанавливаю ссылку базы данных из базы данных B в базу данных A. Затем я выполняю следующую команду:
*создать панель таблицы как select * from #link#.foo;*
Данные хорошо копируются, но когда я проверяю типы столбцов, я замечаю, что CHAR (1 символ) был преобразован в CHAR (3 символа), а при запросе данных в базе данных B все дополняется пробелами. .
Я думаю, что где-то под водой Oracle путает свои собственные байты и символы. CHAR(1 байт) отличается от CHAR(1 char) и т.д. Я читал обо всем этом.
Почему тип данных изменяется на дополненный CHAR (3 символа) и как мне запретить Oracle делать это?
Правка: похоже, это связано с переносом символов CHAR между двумя определенными уровнями исправлений Oracle 9 и 10. Похоже, это действительно ошибка. как только узнаю, выложу обновление. Между тем: не пытайтесь перемещать CHAR между базами данных, как я описал. VARCHAR2 работает нормально (проверено).
Изменить 2: Я нашел ответ и разместил его здесь: Почему Char(1) меняется на Char(3) при копировании через Oracle DBLINK? Жаль, что я не могу принять свой собственный ответ, потому что моя проблема решена.