zoukankan      html  css  js  c++  java
  • 字符串类型

    MySQL提供的字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。对这些类型作一个简要的叙述如下:

    CHAR(M) [BINARY]

    一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。在MySQL3.23以前的版本,M的范围是1 ~ 255个字符,在MySQL3.23版中,M值的范围是0 ~ 255个字符.当值被检索时,空格尾部被删除。CHAR类型在排序和比较时不区分大小写,除非给出BINARY关键词。NATIONAL CHAR(短形式NCHAR)是ANSI SQL的方式来定义CHAR列应该使用缺省字符集。这是MySQL的缺省。CHAR是CHARACTER的一个缩写。 CHAR(0) 可以用于在希望定义一个列,但由于尚不知道其长度,所以不想给其分配空间的情况下,CHAR(0) 列作为占位符很有用处。以后可以用 ALTER TABLE 来加宽这个列。

    存储需求:M字节

    [NATIONAL] VARCHAR(M) [BINARY]

    一个变长字符串。注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。M的范围是1 ~ 255个字符。 VARCHAR类型在排序和比较时不区分大小写,除非给出BINARY关键词。VARCHAR是CHARACTER VARYING一个缩写。

    存储需求:L+1字节(L是存储实际值需要的长度,1为存储该值实际长度)

    TINYBLOB、TINYTEXT

    一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。

    存储需求:L+1字节

    BLOB、TEXT

    一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。

    存储需求:L+2字节

    MEDIUMBLOB、MEDIUMTEXT

    一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。

    存储需求:L+3字节

    LONGBLOB、LONGTEXT

    一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。

    存储需求:L+4字节

    ENUM('value1','value2',...)

    枚举。一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2', ...,或NULL。一个ENUM最多能有65535不同的值。

    存储需求:1或2字节

    SET('value1','value2',...)

    一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。一个SET最多能有64个成员。

    存储需求:1、2、3、4或8字节

    在某种意义上,串实际是一种非常“通用”类型,因为可用它们来表示任意值,不仅仅是字符串。例如,可用串类型来存储二进制数据,如图像、视频或音频。对于所有串类型,都要剪裁过长的值使其适合于相应的串类型。但是串类型的取值范围很不同,有的取值范围很小,有的则很大。取值大的串类型能够存储近 4GB 的数据。因此,应该使串足够长以免您的信息被切断(由于受客户机/服务器通信协议的最大块尺寸限制,列值的最大限额为 24MB)。

    另外,对于串类型,在比较时是忽略大小写的,使用BINARY关键字,则比较时采用ASCII码的方式,即不再忽略大小写。可以使用BINARY的串类型为CHAR和VARCHAR。

    CHAR和VARCHAR类型

    CHAR和VARCHAR类型是类似的,但是在他们被存储和检索的方式不同。 其具体的异同为:

    • 当给定一个CHAR列的值时,其长度将被被修正为在你创建表时所声明的长度。长度可以是1和255之间的任何值。(在MySQL 3.23中,CHAR长度可以是0~255。) 当CHAR值被存储时,他们被用空格在右边填补到指定的长度。当CHAR值被检索时,拖后的空格被删去。
    • 在VARCHAR列中的值是变长字符串。你可以声明一个VARCHAR列是在1和255之间的任何长度,就像对CHAR列。然而,与CHAR类型相反,VARCHAR值只存储所需的字符,外加一个字节记录长度,值不被填补;相反,当值被存储时,拖后的空格被删去。(这个空格删除不同于ANSI SQL规范。) 、
    • 如果你把一个超过列最大长度的值赋给一个CHAR或VARCHAR列,值被截断以适合串类型。

     

    例如,我们用下表来说明存储一系列不同的串值到CHAR(4)和VARCHAR(4)列的结果:

     

    对比值

    CHAR(4)

    存储需求

    VARCHAR(4)  

    存储需求

    ''

    ' '  

    4字节

    ''

    1字节

    'ab'  

    'ab   '

    4字节

    'ab'  

    3字节

    'abcd'  

    'abcd'  

    4字节

    'abcd'  

    5字节

    'abcdefgh'  

    'abcd'  

    4字节

    'abcd'  

    5字节

     

    虽然实际存储的值并不一样,但是查询时,这两种类型是一致的,因为CHAR(4)类型多于的空格将被忽略。

     

    BLOB和TEXT类型

    一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。

    4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。

    如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。

    在大多数方面,你可以认为一个TEXT行列是你所希望大的一个VARCHAR列。同样,你可以认为一个BLOB列是一个VARCHAR BINARY列。差别是:

    • 用MySQL版本3.23.2和更新,你能在BLOB和TEXT列上索引。更旧的MySQL版本不支持这个。
    • 当值被存储时,对BLOB和TEXT列没有拖后空格的删除,因为对VARCHAR列有删除。
    • BLOB和TEXT列不能有DEFAULT值。

    由于,BLOB和TEXT类型可以存储非常多的数据,因此使用BLOB和TEXT类型需要注意的是:

    • BLOB 或 TEXT 列在 MySQL 3.23 以上版本中可以进行索引,虽然在索引时必须指定一个用于索引的约束尺寸,以免建立出很大的索引项从而抵消索引所带来的好处。
    • 由于 BLOB 和 TEXT 值的大小变化很大,如果进行的删除和更新很多,则存储它们的表出现高碎片率会很高。应该定期地运行 OPTIMIZE TABLE 减少碎片率以保持良好的性能。

     

    ENUM和SET类型

    ENUM和SET类型是两种特殊的字符串类型,它们有很多相似之处,使用方法也是分类系,通常都从一个在表创建时明确列举的允许值的一张表中选择,其主要的区别是ENUM列必须是值集合中的一个成员,而SET列可以包括其中的任意成员。

  • 相关阅读:
    qml-qt项目利用google 分析进行数据统计分析
    mark 一下
    一篇神文
    android webview web里面的数据透传到java以及java的数据透传到web
    数据库表大小排序
    sql 删除数据库所有用户表
    mssql 修改文件逻辑名称
    灰色滤镜,网页灰色代码
    log4net.config 单独文件
    js获取页面宽度高度及屏幕分辨率
  • 原文地址:https://www.cnblogs.com/ryansunyu/p/4210971.html
Copyright © 2011-2022 走看看