Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从SQL Server移动到Oracle--字符与字节_Sql_Oracle_Byte - Fatal编程技术网

将数据从SQL Server移动到Oracle--字符与字节

将数据从SQL Server移动到Oracle--字符与字节,sql,oracle,byte,Sql,Oracle,Byte,我正在将数据从SQL Server移动到Oracle。我必须使用我们编写的C代码来完成这项工作。(说来话长,但与公司标准有关,因此不允许SSI或其他实用程序) 我的问题是,当我在SQL Server上有一个字段是NVARCHAR(200),而在oracle中有一个字段是NVARCHAR(200)。我知道在Oracle上,200代表200字节。我的问题是如何从SQL Server中移动数据,因为该字段中填充了所有200个字符。问题是SQL Server中的200个字符超过了200个字节 在此过程中

我正在将数据从SQL Server移动到Oracle。我必须使用我们编写的C代码来完成这项工作。(说来话长,但与公司标准有关,因此不允许SSI或其他实用程序)

我的问题是,当我在SQL Server上有一个字段是NVARCHAR(200),而在oracle中有一个字段是NVARCHAR(200)。我知道在Oracle上,200代表200字节。我的问题是如何从SQL Server中移动数据,因为该字段中填充了所有200个字符。问题是SQL Server中的200个字符超过了200个字节

在此过程中,我从SQL Server读取数据,将其存储到字符串数组中,然后使用数组绑定(Oracle数据访问)将数据推送到Oracle。这一切都很好,但是,当我有一个在SQL Server中完全填充的字段时,它的字节数超过了Oracle中相同字段定义允许的最大字节数

有没有一种简单的方法可以检查SQL Server中字符串的字节大小,看它是否超过200个字节,如果超过200个字节,请截断它,以便只移动200个字节?(对于我正在做的事情,截断数据是可以的)

我知道在Oracle上,200代表200字节

这对于
VARCHAR
是正确的,但对于
NVARCHAR

NVARCHAR2数据类型是仅限Unicode的数据类型。创建包含NVARCHAR2列的表时,您可以提供它所能容纳的最大字符数。[…]字符数据类型NVARCHAR2的宽度规格指的是字符数

(强调矿山)

所以对于
NVARCHAR
你应该很好


对于
VARCHAR2
您确实可以以字节或字符为单位指定长度,但即使在那里,数字也表示可以随时更改的默认设置

Oracle中的NVARCHAR2(200)应为200个字符。指定NVARCHAR2(大小)时,文档状态为:“具有最大长度字符的可变长度Unicode字符串。对于AL16UTF16编码,字节数最多可以是大小的两倍,对于UTF8编码,字节数最多可以是大小的三倍。”因此,根据Oracle文档,您没有问题。你发现问题了吗?你有错误吗?哦,还有一件事。您看过C#中Oracle数据提供程序的批量复制方法吗?我已经成功地使用它们将数据从任何DataReader传输到Oracle,而无需手动绑定。使它变得更容易,因为只要双方的数据类型兼容,就可以让方法来决定如何绑定。非常感谢。。。这解决了我的问题。。我遇到的问题是导致问题的字段是一个最大为200字节的VARCHAR2。通过将其更改为NVARCHAR2,最多200个字符,我们就可以了。您还可以将其定义为
VARCHAR2(200个字符)
以获得200个字符