我是靠谱客的博主 轻松机器猫,这篇文章主要介绍报错:java.sql.SQLException:ORA-12899:value too large for column “xxx“,现在分享给大家,希望可以做个参考。
生产上oracle数据库入库报错:
复制代码
1
2java.sql.SQLException:ORA-12899:value too large for column "xxx"(actual:34,maximum:30)
但是看日志,那个入库字段看着确实是一个17位长的数字。因为该业务已经稳定运行了一段时间,而34又是17的倍数,所以第一时间怀疑是因为入库字段本身的问题,可能是由于全半角导致。
因为在日志中看不出该字段的实际字节长度,所以在另一张表里查询该字段的字节长度。
复制代码
1
2SELECT LENGTHB(XXX) FROM XXXX WHERE XX = X;
结果确实是34,证实了猜想。
补充:
在使用oracle时,很多人不确定一个汉字(或者说一个全角字符)占多少个字节,是两个还是三个?
这个是根据oracle中的字符集编码决定的。
一般情况下,数据库的NLS_CHARACTERSET
为AL32UTF8或UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。
复制代码
1
2SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';
复制代码
1
2
3
4
5
6
75: PARAMETER VALUE 6: ------------------------ ------------------------ 7: NLS_CHARACTERSET ZHS16GBK
另外,LENGTH函数求得是占用字符数,LENGTHB或者VSIZE函数求得是占用字节数。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
181: SQL> SELECT LENGTH('您好') FROM DUAL; 2: 3: LENGTH('您好') 4: -------------- 5: 2 6: 7: SQL> SELECT LENGTHB('您好') FROM DUAL; 8: 9: LENGTHB('您好') 10: --------------- 11: 4 12:
参考:ORACLE数据库汉字占几个字节问题
最后
以上就是轻松机器猫最近收集整理的关于报错:java.sql.SQLException:ORA-12899:value too large for column “xxx“的全部内容,更多相关报错:java.sql.SQLException:ORA-12899:value内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复