• 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编码。

    二、第二种

    1、char:

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

    2、varchar:

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

    3、nvarchar:

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

    4、nchar:

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

    5、char和varchar都是字符串类型的:

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

    用法区别: 

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

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

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

    第三种:

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

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

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

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

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

    我把他们的区别概括成:

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

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

    nchar、nvarchar、ntext处理Unicode码

    参考:

    http://blog.csdn.net/IUNIQUE/article/details/52902033(以上内容部分转自此篇文章)

    http://blog.csdn.net/ivanluc/article/details/5174536(以上内容部分转自此篇文章)

    http://www.jb51.net/article/37995.htm(以上内容部分转自此篇文章)

  • 相关阅读:
    Android入门程序(ListView包括一个网络状态显示)
    shell
    android.os.NetworkOnMainThreadException
    apache虚拟主机名不区分大小写的解决办法
    QT制作全屏播放器以及出现的问题
    QT使用Q_OBJECT链接不通过的一种情况
    使用PHP返回需要登录验证的HTML页面
    怎么样得到Boost的options_description的描述字符串
    QT的QHttp无信号发出,窗口程序关闭时崩溃
    apache 配置https
  • 原文地址:https://www.cnblogs.com/braveLN/p/11888100.html
Copyright © 2020-2023  润新知