1、默认为字节:byte
比如常见写法varchar2(10) 代表只接收最大10字节长度
这种定义情况下10字节只能插入3个汉字,(数字字母只占一字节,汉字占三字节)
如果插入4个汉字会报ORA-12899错误,提示超过长度
2、可自定义为字符:VARCHAR2(10 char)
测试建表语句
CREATE TABLE tUsers1(
UserName VARCHAR2(10 char)
);
插入测试数据
INSERT INTO tUsers1(UserName) VALUES('我是中国人我是中国人');
INSERT INTO tUsers1(UserName)VALUES('你好123');
查询长度会发现oracle中一个汉字占用3个字节
SELECT lengthb(username),username FROM tUsers1
测试效果如下:我们可以看见字段定义为varchar(10 char) 可以插入10个字符(包括汉字),占用最多到30 byte!
另附:
查询字符集:
select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';
Length与LengthB比较
lengthb(string)计算string所占的字节长度
length(string)计算string所占的字符长度
MySql
5.X 以上的版本的定义中表示的字符长度,如上varchar(20)你既可以添加20个英文字符,也可以添加二十个中文字符.
4.X 的版本表示的是字节长度,会根据字符集转变内容字节长度存储。
int(2) 中的2 ,表示的并非是int类型只能输入2位数字,而是只能显示2位数字范围,可以添加11位的int的任何数字。
SqlServer
2008中
select len(‘深圳市中民时代广场B座九楼’) --13
select datalength(‘深圳市中民时代广场B座九楼’) --25