前提:
Weblogic:8.1.4
Oracle:9.0.1
表
CREATE TABLE MYTABLE
(
ID INTEGER NOT NULL,
NAME CHAR(30 BYTE) NOT NULL
)
在程序中使用下述方法插入7个中文字符:
getJdbcTemplate().execute("insert into mytable (id, name) values(1, '我的测试和结果')");
下面分为两种测试方法:
方法一:
使用Weblogic自带的ojdbc14.jar,打印刚刚插入的结果的长度为23,这是因为驱动会认为一个中文为2个字节,这样插入后会自动在中文后面加上30-7*2个字节。
方法二:
用oracle网站下载的该驱动时则打印的长度变为30。这表明此时驱动会认为一个中文为1个字节,这样插入后会自动在中文后面加上30-7*1个字节。
这样就出现了一个问题,如果使用方法二取出刚插入的名称作为新的名称再插入一条记录时会出错,错误为插入的字符值过大。这是因为取出后一个中文在java里认为是两个字节,这样此时的长度为30+7,当然会出错。
解决方法:把char改为varchar2。
但这样的话就使得我要对几乎所有的表进行修改,这是我不想要的。希望大家给我提个好的建议,该如何解决从weblogic自带的驱动改为oracle自带的驱动,而不用大的修改的问题。注:因为其他原因需要更换驱动。