Mysql字段类型——字符类型

Mysql字符类型字段介绍。

  • char 与 varchar类型
  1. CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
  2.  CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数。例如,CHAR(30)可以占用30个字符。
  3. CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。
  4. VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由整张表所有varhcar列大小和使用的字符集确定。整体最大长度是65,532字节)。
  5. 同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。
    VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留
    ,符合标准SQL。
  • binary与 varbinary类型
  1.  BINARY和VARBINARY类类似于CHAR和VARCHAR,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值。
  2. BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度而不是字符长度。
  3. 当保存BINARY值时,在它们右边填充值以达到指定长度。填充值是0x00(零字节)。插入值时在右侧添加0x00 on,并且选择时不删除尾部的字节。比较时所有字节很重要,包括ORDER BY和DISTINCT操作。比较时0x00字节和空格是不同的,0x00<空格。例如:对于一个BINARY(3)列,当插入时 'a' 变为 'a \0'。'a\0'插入时变为'a\0\0'。当选择时两个插入的值均不更改。

     

     

     

  • Enum类型
  1. ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。在某些情况下,ENUM值也可以为空字符串('')NULL

    1. 如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值0。(这与sql_mode有关,在严格模式下,插入允许之外的值错得到一个错误)
    2. 如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且 默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
  2. 每个枚举值有一个索引
    1. 来自列规定的允许的值列中的值从1开始编号。
    2. 空字符串错误值的索引值是0。这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行:
                mysql> SELECT * FROM tbl_name WHERE enum_col=0;
    3. 枚举最多可以有65,535个元素。

  • Set类型
  1.  SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。

    例如,指定为SET('one', 'two') NOT NULL的列可以有下面的任何值:

    ''
    'one'
    'two'
    'one,two'
  2. SET最多可以有64个不同的成员。
  3. 当创建表时,SET成员值的尾部空格将自动被删除。
  4. 当检索时,保存在SET列的值使用列定义中所使用的大小写来显示。请注意可以为SET列分配字符集和 校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。
  5. set类型定义的值的索引值计算:

    在set中声明的位置为n,mysql生成的索引值为: 2^(n-1)

猜你喜欢

转载自yeyusir.iteye.com/blog/2304376