MySQL 数据类型(char(n)、varchar(n)、nchar(n)、 nvarchar(n)的区别)

        

一、第一种

char(n)varchar(n)的区别:

在这里我们可以清楚的看到他们表面的区别就是前面是否有var,在这里解释一下var是什么意思,var代表可变的的意思

下面看个例子:

char(4)//char代表的是字符的意思,这在Java中学过,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。而这里char(n),(除了它,其余三个都是如此)n是代表字节数,现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储中国你好8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’

varchar(4)//同样我们以上面的例子举例,假如存储‘abcd’(4个字节,所以可以存储),再假如存储中国你好8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而varchar(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’

nchar(n)nvarchar(n)

同样我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是unicode编码的格式,不是以n开头的自然不是unicode编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是unicode编码格式,所以n代表2n个字节数,以上面的例子举例:

nchar(4)//既然是unicode编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储中国你好(则完全可以存放)

nvarchar(4)//既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)

最后,总结一下,var代表可变的,n开头代表是unicode编码。

二、第二种

1char

固定长度的非Unicode字符数据,最大长度为8000个字符

2varchar

可变长度的非Unicode数据,最长为8000个字符。

3nvarchar

可变长度Unicode数据,其最大长度为4000字符。

4nchar 

固定长度的Unicode数据,最大长度为4000个字符

5charvarchar都是字符串类型的:

Unicode编码的字符串,结果是字符的整数值

用法区别

文字字段若长度固定,如:身分证号码,就不要用varcharnvarchar应该用char或nchar

支持多语言的站点应考虑使用Unicode ncharnvarchar数据类型以尽量减少字符转换问题 

文字字段若长度不固定,如:地址,则该用varchar或nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率

第三种:

1、charchar存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。

2varchar。存储变长数据,但存储效率没有cahr高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义varchar(10)是最合算的。varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

3texttext存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4ncharnvarcharntext。这三种从名字上看比前面三种多了个“n”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。ncharnvarchar的长度是在14000之间。和charvarchar比较起来,ncharnvarchar则最多存储4000个字符,不论是英文还是汉字;而charvarchar最多能存储8000个英文,4000个汉字。可以看出使用ncharnvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar 

我把他们的区别概括成:

char,nchar定长,速度快,占空间大,需处理

varchar,nvarchar,text不定长,空间小,速度慢,无需处理

nchar、nvarchar、ntext处理Unicode码

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无丿止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值