MariaDB之字符串数据类型

六月ゝ 毕业季﹏ 提交于 2020-12-23 18:50:27

CHAR

语句

[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

一个固定长度的字符串,存储时总是用空格右键填充到指定长度。M代表列长,以字符为单位。M的范围是0255。如果省略M,则长度为1

CHAR(0)列可以包含2个值:空字符串或NULL。这种列不能成为索引的一部分。CONNECT存储引擎不支持CHAR(0)

注意:当检索CHAR值时,除非启用PAD_CHAR_TO_FULL_LENGTHSQL模式,否则尾部的空格会被移除。

在MariaDB 10.2之前,所有的整理类型都是PADSPACE,这意味着CHAR(以及VARCHARTEXT)值的比较不考虑尾部的空格。这不适用于LIKE模式匹配操作符,它考虑到了尾部的空格。

如果一个唯一的索引包含一个列,其中的尾部垫字符被剥离或被忽略,那么插入到该列中的值仅有尾部垫字符的数量不同,将导致重复键错误。

VARCHAR

语法

[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

一个可变长度的字符串。M代表最大列长,以字符为单位。M的范围是065,532VARCHAR的有效最大长度受最大行大小和使用的字符集的限制。例如,每个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(以及CHARTEXT值)的比较不考虑尾部的空格。这不适用于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之前,BLOBTEXT列不能被分配一个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(以及VARCHARCHAR值)的比较不考虑尾部的空格。这不适用于LIKE模式匹配操作符,它考虑到了尾部的空格。

在MariaDB 10.2.1之前,BLOBTEXT列不能被分配一个DEFAULT值。这个限制在MariaDB 10.2.1中被取消了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!