nls_length_semantics参数
在不同的字符串编码方式下,一个中文字符对应的字符byte长度是不同的。比如,一个字段长度设置为10,如果是英文字符就可以容纳10位长度,如果是中文字符就只能容纳最多5位长度。如果采用如UTF-8类宽泛字符集类型,也就3-4个中文字符。
我们定义varchar2(10)
其实是有两层理解,一则是10个byte位长度,另一则是10个输入字符长度。两种理解前者是技术派,后者理解是从业务应用角度看问题。
初始化参数NLS_LENGTH_SEMANTICS
用于指定CHAR
列或VARCHAR2
列的长度定义方式,默认值为BYTE
。当设置该参数为BYTE
时,定义CHAR
列或VARCHAR2
列采用字节长度方式;当设置该参数为CHAR
时,定义CHAR
列或VARCHAR2
列采用字符个数方式。需要注意,设置该参数对于已存在参数没有作用。
show nls_length_semantics;
alter system set nls_length_semantics=char;
select pg_reload_conf();