sql - Oracle Insert Into NArchar2(4000) 不允许 4000 个字符?

标签 sql sql-server oracle insert

我有一个字段数据类型为 NVarchar2(4000) 的表,我正在将数据从 SQL Server 移动到 Oracle Server。 SQL Server 数据类型也是 nvarchar(4000)。我在SQL Server端检查了该字段的最大大小,最大为3996,比4000的限制少了4个字符。

当我尝试将此数据插入 Oracle 时,由于大小而收到错误“LONG”。

这是怎么回事,Oracle NVarchar2(4000) 不允许 4000 个字符吗?如果没有,限制是什么,或者我该如何解决这个问题?

最佳答案

限制为 4000 个字节,而不是 4000 个字符。因此,具有 AL16UTF16 国家字符集的 NVARCHAR2(4000) 将占用最大 4000 字节。

来自oracle docs of MAX_STRING SIZE :

Tables with virtual columns will be updated with new data type metadata for virtual columns of VARCHAR2(4000), 4000-byte NVARCHAR2, or RAW(2000) type.

解决方案:-

此外,如果您想存储 4000 个字符,那么我建议您使用 CLOB

A CLOB (Character Large Object) is an Oracle data type that can hold up to 4 GB of data. CLOBs are handy for storing text.

您可以尝试这样将列数据类型更改为 CLOB:

ALTER TABLE table_name
 ADD (tmpcolumn  CLOB);

UPDATE table_name SET tmpcolumn =currentnvarcharcolumn;
COMMIT;

ALTER TABLE table_name DROP COLUMN currentnvarcharcolumn;

ALTER TABLE table_name
RENAME COLUMN tmpcolumn TO whatevernameyouwant;

关于sql - Oracle Insert Into NArchar2(4000) 不允许 4000 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452666/

相关文章:

sql - 使用序列更新现有记录的最快方法是什么?

mysql - 如何在 SELECT 中没有大量子查询的情况下获得总销售额的百分比

oracle - Spark JDBC 中的编码选项

sql-server - 包含测试用例的 SQL Server .sql 文件

oracle - 如何动态添加时间间隔到时间戳?

sql - 如何在 WHERE 子句中引用列别名

java - 在核心java中,从用户获取输入并将其插入mysql数据库时,显示错误sql错误

python - 为什么我没有在 python 变量中恢复与表中的 SQL 相同的计数

javascript - 将jquery中的值发送到php并返回页面

php - SQL Query 找不到获取结果的方法