我在尝试从 sql server 迁移到 oracle 时遇到了一个奇怪的问题。在我的一个表中,我有一个列定义为NVARCHAR(255)
在读了一点之后我明白当 oracle 计算字节时 SQL 服务器正在计算字符。所以我在 oracle 中将我的表定义为VARCHAR(510)
255*2 = 510 但是当使用 sqlldr 从制表符分隔的文本文件中加载数据时,我收到错误消息,表明某些条目已超过此列的长度。使用以下命令签入 sql server 后:
SELECT MAX(DATALENGTH(column))
FROM table
我知道最大数据长度是 510。
我确实使用了希伯来语_CI_AS collationg,即使我认为它没有任何改变......一个想法?
编辑 经过进一步检查,我注意到问题是由于数据文件造成的(除了@Justin Cave 帖子解决的问题。
我已将行分隔符更改为“^”,因为我的数据都不包含此字符和“|^|” 作为列分隔符。
创建一个控制文件如下:
load data
infile data.txt "str '^'"
badfile "data_BAD.txt"
discardfile "data_DSC.txt"
into table table
FIELDS TERMINATED BY '|^|' TRAILING NULLCOLS
(
col1,
col2,
col3,
col4,
col5,
col6
)
问题是我的数据包含<CR>
并且 sqlldr 期望那里有一个流文件失败<CR>
!!!我不想更改数据,因为它是文本数据(例如错误消息)。