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_LENGTH
SQL模式,否则尾部的空格会被移除。
在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