我的页面输入字段大小为=。
在DB中,相应的列是VARCHAR2(8)。
但是如果我在字段中输入一个长度为8且带有特殊ascii字符的字符串,我将得到以下异常。
ORA-12899:列xxxx的值太大(实际值:10,最大值:8)
我试图在验证器中捕获它,我检查myString.getBytes()。length也是8。
我知道在DB端有一个解决方案是将列更改为VARCHAR2(8 CHAR)。
我可以在控制器中查看此解决方案吗?
答案 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)