环境:
spring4.0 + Mybatis + Oracle 10.2.0.1.0
jar包: ojdbc14-10.2.0.4.0.jar
问题描述:
当类型为CLOB的字段(我的是content)长度大于18000+后,sql报错:
java.sql.SQLException: ORA-01460:转换请求无法实现或不合理解决。截图如下:
问题分析:
1、可以排除程序或sql、驱动等出问题的可能。因为字段长度在18000的时候可以插入。只在字符串很长时出现。
2、java程序的默认中文字符集是UTF-8(此处字符集应该不影响插入),oracle字符集是GBK。因字符串中也有少量数字、字母,所以估计数据库一次可插入的数据在<18000*2。这与oracle中字符串可支持的最大长度32767隐约对应。初步估计是java把Mybatis里的Clob先处理成
查询数据时报-206错误最大的可能是列名确实不在你要查的表里,可能是拼错了,缺少列等等情况。
还有一种情况常在刚建表不久出现。
此时,表,列名都存在。即使你直接将列名(如 id)拷出来,写成:select id from student
仍会报-206错误。
这是因为系统存储的列名有问题。
执行 select colname from syscat.columns where tabname like
'student'
查看取出的colname 与你的列名是否一致,并且一定要是大写。如果不是大写,那么问题就在出在那儿。
因为db2处理查询时是按大写的列名检索syscat.columns表。而db2是区分大小写的。小写的列名就识别不了。
这种情况是因为建表时列名上加了引号,列名入syscat.columns时按照字符串处理,没有自动转大写导致的。
解决办法:drop掉原表,重新建表。重建表时注意表名不能加引号!!