Oracle字段加char与不加char的重要性

今天在A环境一个数据库,触发器在传递一个长度为19位的字符串时,接收长度为36,死活报
属性编号(或索引中的收集元素)违反它的约束条件
后来我把19位改成18位就OK了。可是我另外一个环境B也是19位没问题啊。
第一反应可能是数据库字符集出了问题
一看两边都是UTF8,没啥问题,唯一不同的是其中一个参数
NLS_LENGTH_SEMANTICS
A环境 是 BYTE
B环境 是 CHAR
于是我也把A环境的改成CHAR
依然不支持19位
奇了怪了。
后来仔细一查,发现传递的字段类型是这样的:
A环境  varchar2(20 char)
B环境  varchar2(20)
一个char = 2,即传递19个字符时,长度变成了38,自然放不到36里。
把这个类型长度替换成varchar2(20)
问题搞定。

猜你喜欢

转载自jdkleo.iteye.com/blog/2215408