zoukankan      html  css  js  c++  java
  • 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(以上内容部分转自此篇文章)

  • 相关阅读:
    Open source cryptocurrency exchange
    Salted Password Hashing
    95. Unique Binary Search Trees II
    714. Best Time to Buy and Sell Stock with Transaction Fee
    680. Valid Palindrome II
    Java compiler level does not match the version of the installed Java project facet.
    eclipse自动编译
    Exception in thread "main" java.lang.StackOverflowError(栈溢出)
    博客背景美化——动态雪花飘落
    java九九乘法表
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7991527.html
Copyright © 2011-2022 走看看