Topic: 救命啊~~oracle 的varchar2类型能插入最多多少汉字? |
Print this page |
1.救命啊~~oracle 的varchar2类型能插入最多多少汉字? | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-22 14:50 我定义的varchar2长度有4000,但是只能插入666个汉字(1333字节数),多一个都不行!是什么问题,我的oracle字符集已经是ZH16GBK了。 |
2.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: li_chuansong Posted on: 2003-07-22 14:58 oracle 规定varchar2最大值就为4000bytes,可用clob类型,你积分多少,给我呼吁一下加一分。 |
3.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: scud Posted on: 2003-07-22 22:18 用流的方式保存. |
4.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: wnqq Posted on: 2003-07-23 05:39 luaoun wrote: Oracle 9i 的 varchar2 最大可存 32,767 bytes. 直接存进 varchar2 只能存 4,000 bytes, 间接存就可存到 32,767 bytes. 你的 666 汉字所用的编码里 (可能是 UTF8) 每个字占了 3 bytes, 当你存的时候, 没有作好 charset-encoding 的转换, 造成你的每个 byte 被当成是 java 的一个 char (2 bytes) 来存, 总言之, 你的每个汉字要用 3x2=6 bytes 存进 oracle 中, 所以最多只能存到 4000/6=666 字. 如果你的汉字每个字只用 2 bytes, 而且存的过程正确, 那摸最多就可以存到 16,000 多个字了. 不过我还是推荐你用 clob 来存大的文字资料 |
5.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: dapan Posted on: 2003-07-23 09:37 多谢wnqq!非常专业! ^_^ |
6.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: wnqq] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-23 12:40 wnqq wrote: 我输入了667个汉字,提交到Servlet里后再将存在String里的汉字转换成bytes再打出它的长度,打出的字节长度是1334,说明我的汉字占用了2 bytes,但是问题仍旧如此,不能插入超出最大字符数。 顺便说说clob字段类型,用了它查询速度会有影响的。 |
7.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-23 12:49 天煞的varchar,弄得俺都开始讨厌写程序了。 |
8.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: wnqq Posted on: 2003-07-23 15:02 luaoun wrote: 请您再多提出一些资料好麻? 因为只有看到这些文字说明很难找到问题的发生的地方 另外顺便问一下 (可能和问题没有关系, 我只是先确认一下) 你的 Servlet container 所用的 oracle 的相关 library 除了 classes12.jar 之外, 还有没有用到别的呢? 至于你所说的用了clob查询速度会有影响 对于这样的看法我无法给你肯定的答复 不过, clob 本来就是设记来处里大的字段的 如果这点都作不好的话 那摸 Oracle 过去几年也真的是白混了 |
9.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-23 21:12 我决的我的程序没有什么特殊的地方,页面提交servlet再用oracle提供的jdbc程序插入到数据库中,用的是classes12.jar没有用其它oracle的lib。 页面上有一个textarea多行文本框(列="70" 行="10"),页面内容输入完成后提交表单到servlet,servlet程序里插入数据库的语句如下:
newInfoData对象是页面表单实体,包含了所有用户在页面上输入的各个字段的内容,抛错的地方我已经在上面的代码行中注释了。 其实是个很简单的程序,可就是输入的内容不能超过666个汉字即1333个bytes. |
10.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: wnqq Posted on: 2003-07-24 00:51 luaoun wrote: sorry 丛上面的程序看不出来问题出在哪 需要更多的资讯才能找出问题所在 另外除了 classes12.jar, 你还需要加上 nls_charset12.jar, 才能正常处理汉字等多国语言. 如果运气好的话, 可能加上这个 lib 后就能解决你的问题了 |
11.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: why Posted on: 2003-07-24 13:11 You may consider using NVARCHAR2, the National Language Support version of VARCHAR2. This topic'll move to Database board soon. |
12.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: why] | Copy to clipboard |
Posted by: wnqq Posted on: 2003-07-24 22:38 why wrote: 要不要用 NVARCHAR2 是 optional 的 这和解决原来的问题没有直接关系 |
13.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-25 10:45 恩~wnqq说的是,我用了NVARCHAR2问题依旧。 我查了以前的数据库除了有3条记录的subject字段长度有超过个1333个字节长度的记录,其余的都没有超过,但是这3条记录里subject字段的内容如下所示:
上面的内容是从数据库重查出的大于1333字节的subject字段内容,好像都是uncode编码嘛~~奇怪了! |
14.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-25 10:56 咦~~奇怪,我在上面的代码标签之间输入的是“&#35813”怎么变成了“该”字,被转换了? 这要Rainman来回答了 |
15.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: rainman Posted on: 2003-07-25 11:01 这个问题我遇到过,原因是Oracle JDBC Driver有Bug,PreparedStatement的setString()会预检查数据类型,而这部分代码未考虑双字节字符的问题,所以就误报了。 解决方法有二: 1. 数据库编码用US7ASCII,估计此方法肯定不会采用。 2. 不用PreparedStatement,而直接组成sql语句插入,这样也有弊端啦,需要自己实现一个字符串转义过程,效率也稍微差那么一点点吧。 当然还是改用CLOB字段来解决比较好吧。 |
16.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-25 11:15 太感谢rainman了,我到后来也开始怀疑是Oracle JDBC Driver的问题了,多谢有rainman给我这样肯定的回答,否则又要绕圈子去解决这问题了。也感谢wnqq 的帮助。 |
17.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: wnqq Posted on: 2003-07-25 14:30 luaoun wrote: 好象都没有帮到你的忙 不好意思 还是 rainman 最厉害 |
18.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: luaoun Posted on: 2003-07-26 21:42 恩~他真的很厉害,我就是冲着这里有rainman才天天来这论坛看看的。没有技术高手的论坛就会缺少活力了! |
19.Re:救命啊~~oracle 的varchar2类型能插入最多多少汉字? [Re: luaoun] | Copy to clipboard |
Posted by: rainman Posted on: 2003-07-29 08:59 搞得我太不好意思了 ,大家互相帮助,互相学习嘛。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |