CHAR
语句
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
一个固定长度的字符串,存储时总是用空格右键填充到指定长度。M代表列长,以字符为单位。M的范围是0到255。如果省略M,则长度为1。
CHAR(0)列可以包含2个值:空字符串或NULL。这种列不能成为索引的一部分。CONNECT存储引擎不支持CHAR(0)。
注意:当检索CHAR值时,除非启用PAD_CHAR_TO_FULL_LENGTHSQL模式,否则尾部的空格会被移除。
在MariaDB 10.2之前,所有的整理类型都是PADSPACE,这意味着CHAR(以及VARCHAR和TEXT)值的比较不考虑尾部的空格。这不适用于LIKE模式匹配操作符,它考虑到了尾部的空格。
如果一个唯一的索引包含一个列,其中的尾部垫字符被剥离或被忽略,那么插入到该列中的值仅有尾部垫字符的数量不同,将导致重复键错误。
VARCHAR
语法
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
一个可变长度的字符串。M代表最大列长,以字符为单位。M的范围是0到65,532。VARCHAR的有效最大长度受最大行大小和使用的字符集的限制。例如,每个utf8字符最多需要3个字节,所以使用utf8字符集的VARCHAR列可以声明最大为21,844个字符。
注意:对于ColumnStore引擎,M代表最大列长,单位为字节。
MariaDB将VARCHAR值存储为一个字节或两个字节的长度前缀加数据。长度前缀表示值的字节数。如果值要求不超过255个字节,则VARCHAR列使用一个长度字节,如果值可能要求超过255个字节,则使用两个长度字节。
MariaDB遵循标准的SQL规范,不删除VARCHAR值中的尾部空格。
VARCHAR(0)列可以包含2个值:空字符串或NULL。这种列不能成为索引的一部分。CONNECT存储引擎不支持VARCHAR(0)。
VARCHAR是CHARACTER VARYING的简写。NATIONAL VARCHAR是标准的SQL方式,定义一个VARCHAR列应该使用一些预定义的字符集。MariaDB使用utf8作为这个预定义字符集,MySQL 4.1及以上版本也是如此。NVARCHAR是NATIONAL VARCHAR的简写。
在MariaDB 10.2之前,所有MariaDB的字符集都是PADSPACE类型,这意味着VARCHAR(以及CHAR和TEXT值)的比较不考虑尾部的空格。这不适用于LIKE模式匹配操作符,因为它考虑到了尾部的空格。从MariaDB 10.2开始,有一些NO PAD字符集是可用的。
如果一个唯一的索引由一个列组成,其中的尾部垫字符被剥离或忽略,那么插入到该列中的值仅因尾部垫字符的数量而不同,将导致一个重复键错误。
BINARY
语法
BINARY(M)
BINARY类型与CHAR类型类似,但存储的是二进制字节字符串,而不是非二进制字符字符串。M代表以字节为单位的列长。
它不包含字符集,比较和排序是基于字节的数值。
如果超过了最大长度,并且没有启用SQL严格模式,那么额外的字符将被删除,并发出警告。如果启用了严格模式,则会出现错误。
BINARY值在插入时用0x00(零字节)向右填充到指定长度。SELECT时不会删除填充,因此在排序和比较时需要考虑到这一点,因为所有字节都是重要的。零字节,0x00小于一个空格,便于比较。
VARBINARY
语法
VARBINARY(M)
VARBINARY类型与VARCHAR类型类似,但存储的是二进制字节字符串,而不是非二进制字符字符串。M代表最大列长,单位是字节。
它不包含字符集,比较和排序是基于字节的数值。
如果超过了最大长度,并且没有启用SQL严格模式,那么额外的字符将被删除,并发出警告。如果启用了严格模式,则会出现错误。
与BINARY值不同,VARBINARY在插入时不需要右键填充。
TINYBLOB
语法
TINYBLOB
一个BLOB列,最大长度为255字节。每个TINYBLOB值都使用一个一字节长度的前缀来存储,该前缀表示该值的字节数。
TINYTEXT
语法
TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
一个最大长度为255个字符的TEXT列。如果值包含多字节字符,则有效的最大长度较小。每个TINYTEXT值都使用一个一字节长度的前缀来存储,该前缀表示该值的字节数。
BLOB
语法
BLOB[(M)]
BLOB列的最大长度为65,535字节。每个BLOB值都使用一个两个字节的长度前缀来存储,前缀表示值的字节数。
可以为这种类型给出一个可选的长度M。如果这样做,MariaDB会将列创建为足够大的最小的BLOB类型,以容纳M字节长的值。
BLOB也可以用来存储动态列。
在MariaDB 10.2.1之前,BLOB和TEXT列不能被分配一个DEFAULT值。这个限制在MariaDB 10.2.1中被取消了。
TEXT
语法
TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
TEXT列,最大长度为65,535个字符。如果值包含多字节字符,则有效的最大长度较小。每个TEXT值都使用一个两个字节的长度前缀来存储,这个长度前缀表示值的字节数。如果需要更大的存储量,可以考虑使用MEDIUMTEXT代替。
可以为这种类型给出一个可选的长度M。如果这样做,MariaDB会将列创建为最小的TEXT类型,大到足以容纳M个字符长的值。
在MariaDB 10.2之前,所有MariaDB的字符集类型都是PADSPACE,这意味着TEXT(以及VARCHAR和CHAR值)的比较不考虑尾部的空格。这不适用于LIKE模式匹配操作符,它考虑到了尾部的空格。
在MariaDB 10.2.1之前,BLOB和TEXT列不能被分配一个DEFAULT值。这个限制在MariaDB 10.2.1中被取消了。
来源:oschina
链接:https://my.oschina.net/u/3918369/blog/4835642