我有 2 个数据库,我想将包含 CHAR 列的现有表从数据库 A 传输到数据库 B。
数据库 A 是 Oracle 9i,编码为 WE8ISO8859P1,并包含一个表“foo”,其中至少有 1 列类型为 CHAR(1 char)。我无法更改数据库 A 上的表,因为它是第三方设置的一部分。
数据库B是我自己的Oracle 10g数据库,由于各种原因使用编码AL32UTF8,我想将foo复制到这个数据库中。
我设置了从数据库 B 到数据库 A 的数据库链接。然后发出以下命令:
*从#link#.foo中选择*创建表格栏;*
数据被很好地复制了,但是当我检查列的类型时,我注意到 CHAR(1 char) 已转换为 CHAR(3 char),并且在查询数据库 B 中的数据时,它都用空格填充.
我认为在水下某处,Oracle 混淆了它自己的字节和字符。CHAR(1 byte) 与 CHAR(1 char) 等不同。我已经阅读了所有这些内容。
为什么数据类型变为填充的 CHAR(3 char) 以及如何阻止 Oracle 这样做?
编辑:这似乎与在 Oracle 9 和 10 的两个特定补丁级别之间传输 CHAR 有关。看起来这确实是一个错误。一旦我发现我会发布更新。同时:不要尝试像我描述的那样在数据库之间移动 CHAR。VARCHAR2 工作正常(经过测试)。
编辑 2:我找到了答案并将其发布在这里: Why does Char(1) change to Char(3) when copying over an Oracle DBLINK? 太糟糕了,我不能接受自己的答案,因为我的问题已经解决了。