如何检查输入的大小以避免超出DB列限制

时间:2017-07-12 16:10:37

标签: oracle jsp encoding

我的页面输入字段大小为=。

在DB中,相应的列是VARCHAR2(8)。

但是如果我在字段中输入一个长度为8且带有特殊ascii字符的字符串,我将得到以下异常。

ORA-12899:列xxxx的值太大(实际值:10,最大值:8)

我试图在验证器中捕获它,我检查myString.getBytes()。length也是8。

我知道在DB端有一个解决方案是将列更改为VARCHAR2(8 CHAR)。

我可以在控制器中查看此解决方案吗?

2 个答案:

答案 0 :(得分:2)

错误告诉你你已经给了10个字节,但是这个列只允许8.我假设它是字节,因为你使用了中文字符集。所以,我认为该列的创建就好像它是VARCHAR2(8字节)。

如果您描述该表,您将看到发生了什么。将描述与此描述进行比较:

create table x (a varchar2(30), b varchar2(30 byte), c varchar2(30 char));

执行以获取字节数的代码几乎是正确的。而不是:

myString.getBytes().length   /* this probably returns 8 */

你需要执行这个:

myString.getBytes("UTF-8").length /* this probably returns 10 */

答案 1 :(得分:1)

这应该对您有所帮助,这将以字节为单位返回实际大小。

SELECT LENGTHB ('é') 
   FROM DUAL;

以上将返回2.因此,无论您使用什么字符,都可以指定MY_VARCHAR_FIELD VARCHAR2(2 BYTES)

之类的内容