数据库中varchar类型长度是指字符长度还是字节长度?两种定义方法
Oracle中varchar2类型的字段长度单位默认是按照byte来定义,
比如常见写法varchar2(10) 代表只接收最大10字节长度
这种定义情况下10字节只能插入3个汉字,(数字字母只占一字节,汉字占三字节)
如果插入4个汉字会报ORA-12899错误,提示超过长度
其实我们在Oracle中也可以用字符为单位来定义varchar2字段的长度,这个时候需要注意在建表时像下面这样写成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
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751902.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库