【MySQL基础】String类型CHAR和VARCHAR类型等【MySQL基础】String类型 CHAR和VARCHAR类型等
汇编语言包括哪几种类型⼀下主要参考MySQL⼿册最近要好好读。
主要讨论以下主题:
·        CHAR 和 VARCHAR介绍以及⼯作?
·        CHAR 和 VARCHAR 区别
·        CHAR(4) 和 VARCAHR(4)区别
·        了解TEXT 和 BLOB
·        了解ENUM
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类
型如何⼯作以及如何在查询中使⽤这些类型。
1. String类型
智梦园1.1. CHAR和VARCHAR类型
CHAR tʃɑːVARCHAR vɑ:(r)
CHAR和VARCHAR类型类似,但它们保存和检索的⽅式不同。它们的最⼤长度和是否尾部空格被保留等⽅⾯也
不同。在存储或检索过程中不进⾏⼤⼩写转换。
CHAR和VARCHAR类型声明的长度表⽰你想要保存的最⼤字符数。例如,CHAR(30)可以占⽤30个字符。
CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边
填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进⾏⼤⼩写转
换。
VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最⼤有效长度由最⼤
mysql语句分类⾏⼤⼩和使⽤的字符集确定。整体最⼤长度是65,532字节)。
同CHAR对⽐,VARCHAR值保存时只保存需要的字符数,另加⼀个字节来记录长度(如果列声明的长度超
过255,则使⽤两个字节)。
VARCHAR值保存时不进⾏填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。
下⾯的表显⽰了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的
差别:
值CHAR(4)存储需求VARCHAR(4)存储需求
'''    '4个字节''1个字节
'ab''ab  '4个字节'ab '3个字节
'abcd''abcd'4个字节'abcd'5个字节
'abcdefgh''abcd'4个字节'abcd'5个字节
请注意上表中最后⼀⾏的值只适⽤不使⽤严格模式时;如果MySQL运⾏在严格模式,超过列长度不的值不保
存,并且会出现错误。
从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。具体例⼦可以
参考mysql⼿册。
1.2. BLOB和TEXT类型
BLOB是⼀个⼆进制⼤对象,可以容纳可变数量的数据。有4种BLOB类
型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最⼤长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最⼤我爱辅助论坛
长度和存储需求。
BLOB 列被视为⼆进制字符串(字节字符串)。TEXT列被视为⾮⼆进制字符串(字符字符串)。BLOB列没有字符
集,并且排序和⽐较基于列值字节的数值值。TEXT列有⼀个字符集,并且根据字符集的校对规则对值进⾏排序
和⽐较。
在TEXT或BLOB列的存储或检索过程中,不存在⼤⼩写转换。
在⼤多数⽅⾯,可以将BLOB列视为能够⾜够⼤的VARBINARY列。同样,可以将TEXT列视
为VARCHAR列。BLOB和TEXT在以下⼏个⽅⾯不同于VARBINARY和VARCHAR:
·        当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
java新手教程入门
请注意⽐较时将⽤空格对TEXT进⾏扩充以适合⽐较的对象,正如CHAR和VARCHAR。
·        对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
·        BLOB和TEXT列不能有默认值。
1.3. ENUM类型
ENUM是⼀个字符串对象,其值来⾃表创建时在列规定中显式枚举的⼀列值。
在某些情况下,ENUM值也可以为空字符串('')或NULL:
·        如果你将⼀个⾮法值插⼊ENUM(也就是说,允许的值列之外的字符串),将插⼊空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。后⾯有详细讨论。
·        如果将ENUM列声明为允许NULL,NULL值则为该列的⼀个有效值,并且默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
每个枚举值有⼀个索引:
·
        来⾃列规定的允许的值列中的值从1开始编号。
·        空字符串错误值的索引值是0。这说明你可以使⽤下⾯的SELECT语句来出分配了⾮法ENUM值的⾏:·                mysql> SELECT * FROM tbl_name WHERE enum_col=0;
·        NULL值的索引是NULL。
例如,定义为ENUM的列('one','two','three')可以有下⾯所⽰任何值。还显⽰了每个值的索引:
值索引
NULL NULL
''0
'one'1
'two'2
'three'3
枚举最多可以有65,535个元素。
当创建表时,ENUM成员值的尾部空格将⾃动被删除。
当检索时,保存在ENUM列的值使⽤列定义中所使⽤的⼤⼩写来显⽰。请注意可以为ENUM列分配字符集和校对规则。对于⼆进制或⼤⼩写敏感的校对规则,当为列分配值时应考虑⼤⼩写。
如果在数值上下⽂中检索⼀个ENUM值,将返回列值的索引。例如,你可以这样从ENUM列搜索数值值:mysql> SELECT enum_col+0 FROM tbl_name;
如果将⼀个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员。(但是,这不适
合LOAD DATA,它将所有输⼊视为字符串)。不建议使⽤类似数字的枚举值来定义⼀个ENUM列,因为这很容易引起混淆。例如,下⾯的列含有字符串值'0'、'1'和'2'的枚举成员,但数值索引值为1、2和3:
numbers ENUM('0','1','2')
java个人简历模板根据枚举成员在列定义中列出的顺序对ENUM值进⾏排序。(换句话说,ENUM值根据索引编号进⾏排序)。例如,对于ENUM('a','b'),'a'排在'b'前⾯,但对于ENUM('b','a'),'b'排在'a'前⾯。空字符串排在⾮空字符串前⾯,并且NULL值排在所有其它枚举值前⾯。要想防⽌意想不到的结果,按字母顺序
规定ENUM列。还可以使
⽤GROUP BY  CAST(col AS CHAR)或GROUP BY  CONCAT(col)来确保按照词汇对列进⾏排序⽽不是⽤索引数字。
如果你想要确定⼀个ENUM列的所有可能的值,使⽤SHOW COLUMNS FROM tbl_name LIKE enum_col,并解析输出中第2列的ENUM定义。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。