zoukankan      html  css  js  c++  java
  • MySQL中char、varchar和text的区别

    引自:http://www.sensail.com/archives/85

    他们的存储方式和数据的检索方式都不一样。

    数据的检索效率是:char>varchar>text

    空间占用方面,要具体情况具体分析了。

    CHAR(M) M个字节,0 <=M<= 255
    VARCHAR(M) L+1个字节,其中L<=M且0 <=M<= 65535
    建表时M的最大值为65532
    TEXT L+2个字节,其中L< 216

    Char为定长,varchar,text为变长

    Char在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。(与sql server可能有些不同)

    Varchar在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留。

    TEXT列不能有默认值,存储或检索过程中,不存在大小写转换.

    当存储的字符超过他们定义的长度时候,如果不是在sql服务器的严格模式下,都会自动截取合适的字段存储,而不会出现错误。但是,如果是中文的话同样要报错误:)比如定义char(4),然后insert (‘c哈哈’).

     注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值

    text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试 :))

    (mysql5.5环境下可以指定长度 create table test(a text(65536) );
    mysql> desc test;
    +-------+------------+------+-----+---------+-------+
    | Field | Type       | Null | Key | Default | Extra |
    +-------+------------+------+-----+---------+-------+
    | a     | mediumtext | YES  |     | NULL    |       |
    +-------+------------+------+-----+---------+-------+)

    存储计算:

    在使用UTF8字符集的时候,手册上是这样描叙的:

    ·        基本拉丁字母、数字和标点符号使用一个字节。

    ·        大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言。

    ·        韩语、中文和日本象形文字使用三个字节序列。

    char会造成空间浪费,但是有速度优势;而varchar节省了空间,但是速度就不如char。

    1. 经常变化的字段用varchar
    2. 知道固定长度的用char
    3. 尽量用varchar
    4. 超过255字节的只能用varchar或者text
    5. 能用varchar的地方不用text

    CREATE TABLE `tag` (
     

    `tag` varchar(65532) DEFAULT NULL COMMENT 'Tag'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1


    tinyint(4)
    bool 等同于TINYINT(1) -128~127 0~255。
    SMALLINT(6) -32768~32767 0~65535
    MEDIUMINT(9) -8388608~8388607 0~16777215
    int(11) -2147483648~2147483647 0~4294967295
    BIGINT(20) -9223372036854775808~9223372036854775807 0~18446744073709551615

    char 最大255
    varchar 0~65532
    char的总结:
          char最大长度是255字符,注意是字符数和字符集没关系。可以有默认值,尾部有空格会被截断。
    varchar的总结:
          varchar的最大长度65535是指能存储的字节数,其实最多只能存储65532个字节,还有3个字节用于存储长度。可以有默认值,尾部有空格不会被截断
    text的总结:
          text和varchar基本相同。text会忽略指定的大小这和varchar有所不同,text不能有默认值。尾部有空格不会被截断。text使用额 外的2个字节来存储数据的大小,varchar根据存储数据的大小选择用几个字节来存储。text的65535字节全部用来存储数据,varchar则会 占用1-3个字节去存储数据大小。
  • 相关阅读:
    Oracle
    Oracle入门
    数据库测试的测试点
    overload重载与override重写的区别
    Java接口的default关键字用法解释
    pytest执行入口
    Gradle的安装与基本配置
    玩转HTML5+跨平台开发[5] HTML表单标签
    玩转HTML5+跨平台开发[4] HTML表格标签
    玩转HTML5+跨平台开发[3] HTML列表标签
  • 原文地址:https://www.cnblogs.com/any91/p/3239872.html
Copyright © 2011-2022 走看看