引用手册中的原话:
LENGTH_IN_CHAR:
VARCHAR 类型对象的长度是否以字符为单位。取值:1、Y表示是,0、N表示否。默认值为0。可选参数
1 或Y:是,所有VARCHAR类型对象的长度以字符为单位。这种情况下,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过8188;
0 或N:否,所有VARCHAR 类型对象的长度以字节为单位。
创建实例的时候,该参数默认为0,varchar类型的字段长度是以字节为单位,那么该参数为0和1的时候,以及编码选择GB18030和UNICODE的时候,varchar类型字段存入的实际情况又是如何呢?下面通过不同的场景测试结果来给出一个确定的答案。
共用的建表语句如下:
create table test(c1 varchar(10));
一、UNICODE_FLAG=0,LENGTH_IN_CHAR=0
–插入10个英文,正常
insert into test(c1) values(‘ABCDEFGHIJ’);
–插入11个英文,错误
insert into test(c1) values(‘ABCDEFGHIJA’);
–插入5个中文,正常
insert into test(c1) values(‘测试一下测’);
–插入6个中文,错误