字段NVARCHAR2(2000),全部用汉字做数据更新测试的,两千个字符,一行50个共40行,在PL/SQL Developer中通过编辑数据表格提交后,查询数据只剩下1961个汉字,加上39个换行符正好2000,而用Update语句则只能更新1333个汉字(去除了换行),如果再加2个字母数字的话也可以,但3个就不行了,提示“ORA-01704字符串太长了”错误,我在所开发的Delphi程序中通过TClientDataSet提交,中文字符连1333个都不到,但提示的是“ORA-01461:仅能绑定要插入 LONG 列的 LONG 值”错误,求解!!
nvarchar2
nvarchar2
解决方案 »
- 如何在存储过程里实现快速删除插入大量数据?
- oracle PLSQL 中cursor 可以作为函数的参数吗?下边有例子。
- 从oracle的存储过程地返回值是嵌套表,在java中怎么取得
- oracle 不能用WITH NOCHECK吗,为什么下面这句总提示非法的 ALTER TABLE 选项
- SQL 缓冲区中无可运行的程序
- 连接oracle数据库出了问题
- 新建database出错.请各位不吝赐教.在线等
- 大家好,一个很菜的问题!
- 如何实现"a001"这样的字段的自增啊?
- oracle中日期与时间的问题 各位多多指教 谢谢 (急!急!急!急!急!急!)
- 安装orcale 11g后, 如何导入dmp文件。
- win7(64bit)在安装Oracle_11G时, PATH 环境变量的长度这个问题解决不了,还望各位高手帮忙解决下。谢谢了....
-- 但是,NVARCHAR2类型最多只能允许4000个字节,即: NVARCHAR2(4000 BYTE)
10:39:41 SCOTT@myora > create table test1(cname varchar2(3999 byte));表已创建。10:39:45 SCOTT@myora > create table test2(cname varchar2(4000 byte));表已创建。10:39:55 SCOTT@myora > create table test3(cname varchar2(4001 byte));
create table test3(cname varchar2(4001 byte))
*
第 1 行出现错误:
ORA-00910: 指定的长度对于数据类型而言过长
所以,VARCHAR2(4000 BYTE) 所能容纳最多汉字个数也不一样。
-- 你可以用如下SQL先查看一下你的数据库字符集:
select *
from nls_database_parameters
where parameter = 'NLS_CHARACTERSET';PARAMETER VALUE
------------------------------ ------------------------------
NLS_CHARACTERSET AL32UTF8
-- 例如,我的数据库的字符集是AL32UTF8,我知道该字符集一个汉字占三个字节,
-- 那么这个时候,我创建一个 VARCHAR2(4000 BYTE)的字段最多能存放1333个汉字10:47:23 SCOTT@myora > create table test2(cname varchar2(4000 byte));表已创建。10:48:18 SCOTT@myora > insert into test2(cname) select lpad('罗',4000,'罗') from dual;已创建 1 行。10:48:27 SCOTT@myora > insert into test2(cname) select lpad('罗',4001,'罗') from dual;已创建 1 行。10:48:43 SCOTT@myora > insert into test2(cname) select lpad('罗',4002,'罗') from dual;已创建 1 行。10:48:50 SCOTT@myora > commit;提交完成。10:48:52 SCOTT@myora > select length(cname) from test2;LENGTH(CNAME)
-------------
1334
1334
133410:49:17 SCOTT@myora > select length(cname), lengthb(cname) from test2;LENGTH(CNAME) LENGTHB(CNAME)
------------- --------------
1334 4000
1334 4000
1334 4000
-- 如上例子所示,表面上看,三条记录均已插入成功,其实,数据库内部作了截断操作。
你用utf16就行了,utf16是两个字节存储一个汉字。
我用的是NVARCHAR2类型,长度最大2000,字符集也是AL32UTF8,但是为什么在PL/SQL Developer里面通过数据表格进行修改更新,字符可以保存到1961个,加上回车换行正好2000个?我因为程序中用到一个文本比较多的字段,因为程序兼容原因不能用CLOB字段,所以用数个nvarchar2字段切分保存,我不知道该按多大的长度来切分文本,是否应该包括回车,按2000来分是会报错的(我这里的2000是不管中文英文都只算1个字符)