mysql varchar 长度 性能_varchar(n),nvarchar(n) 长度、性能、及所占空间分析

各种数据库表现不同:

SQL Server:

varchar(n),nvarchar(n) 中的n怎么解释:  nvarchar(n)最多能存n个字符,不区分中英文。

varchar(n)最多能存n个字节,一个中文是两个字节。

所占空间:  nvarchar(n)一个字符会占两个字节空间。

varchar(n)中文占两字节空间,英文占一个。

n的取值范围:  nvarchar(n)   n的范围是:1与4000之间

varchar(n)   n的范围是:1与8000之间

n的大小是否会影响性能:  varchar及nvarchar里的长度 n 不会影响空间大小及性能。除非n是max并且内容大于4000或8000

设置n更多的是业务需要,如限制身份证只能输入18位,再多就报错,或者防止恶意攻击撑爆硬盘。对空间及性能都没有影响

n设置多大比较好:  既然对空间及性能都没有影响,那我们只要考虑业务需要就可以了,我分析过微软的数据库,大都设置为:256,也会看到64,128,512,max等,可能是便于记忆吧。

varchar(n),nvarchar(n)存储空间举例解释:  包含 n 个字符的可变长度 Unicode 字符数据。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee

那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar。

varchar和nvarchar如何选择?

varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unicode来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unicode编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节.

正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.

但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.

使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.

当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.

所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.

MySql

mysql varchar(50) 不管中文 还是英文 都是存50个的

MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。

Oracle

主要区别可以简单概括为两点:

以2结尾的类型是变长字符串,以实际长度存储;

以N开头的类型是每个字符固定2个长度;

CHAR固定长度字符域,最大长度可达2000个字节

NCHAR多字节字符集的固定长度字符域,长度随字符集而定,最多为2000个字符或2000个字节

VARCHAR2可变长度字符域,最大长度可达4000个字符

NVARCHAR2多字节字符集的可变长度字符域,长度随字符集而定,最多为4000个字符或4000个字节

Oracle中nvarchar2和varchar2的区别:

1、NVARCHAR2中存储中文字时,一个中文字当一个字符来处理

NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。

2、而VARCHAR2中一个中文字当两个字符来处理

VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个

Oracle中nvarchar2和varchar2的共同点:

不定长存储,当存储信息长度小于指定的长度,那么就以实际存入的长度为准这一点不像varchar这种定长存储那样浪费空间,比如varchar 指定是10个字符,那么存入5个字符的时候,他会自动填充空格来补齐以达到指定的长度。

NCHAR、NVARCHAR是以UNICODE-16存储,每个字符固定两个字节

注意 !

varchar早就建议不使用了,应该用VARCHAR2。nvarchar估计也不使用的,也应该是使用nvarchar2。

VARCHAR2(size),可变长度的字符串,其最大长度为 size 个字节。size 的最大值是 4000,而最小值是 1。您必须指定一个 VARCHAR2 的 size。

NVARCHAR2(size),可变长度的字符串,依据所选的国家字符集,其最大长度为 size 个字符或字节。size 的最大值取决于存储每个字符所需要的字节数,其上限为 4000 个字节。您必须为 NVARCHAR2 指定一个 size。

VARCHAR2与NVARCHAR2的不同之处在于它们存放信息占用的空间不同。VARCHAR2存放的英文字符只占一个字节,而nvarchar2依据所选的字符集,大多为两个。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值