返回介绍

字符串类型

发布于 2020-10-26 07:01:32 字数 5049 浏览 1060 评论 0 收藏 0

TiDB 支持 MySQL 所有的字符串类型,包括 CHARVARCHARBINARYVARBINARYBLOBTEXTENUM 以及 SET,完整信息参考这篇文档。

类型定义

CHAR 类型

定长字符串。CHAR 列的长度固定为创建表时声明的长度。当保存 CHAR 值时,不足固定长度的字符串在后面填充空格,以达到指定的长度。M 表示列长度(字符的个数,不是字节的个数)。长度可以为从 0 到 255 的任何值。

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

VARCHAR 类型

变长字符串。M 表示最大列长度(字符的最大个数)。VARCHAR 的空间占用大小不得超过 65535 字节。在选择 VARCHAR 长度时,应当根据最长的行的大小和使用的字符集确定。

对于不同的字符集,单个字符所占用的空间可能有所不同。以下表格是各个字符集下单个字符占用的字节数,以及 VARCHAR 列长度的取值范围:

字符集单个字符字节数VARCHAR 最大列长度的取值范围
ascii1(0, 65535]
latin11(0, 65535]
binary1(0, 65535]
utf83(0, 21845]
utf8mb44(0, 16383]
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

TEXT 类型

文本串。M 表示最大列长度(字符的最大个数),范围是 0 到 65535。在选择 TEXT 长度时,应当根据最长的行的大小和使用的字符集确定。

TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

TINYTEXT 类型

类似于 ,区别在于最大列长度为 255。

TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

MEDIUMTEXT 类型

类似于 ,区别在于最大列长度为 16,777,215。

MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

LONGTEXT 类型

类似于 ,区别在于最大列长度为 4,294,967,295。

LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

BINARY 类型

类似于 ,区别在于 BINARY 存储的是二进制字符串。

BINARY(M)

VARBINARY 类型

类似于 ,区别在于 VARBINARY 存储的是二进制字符串。

VARBINARY(M)

BLOB 类型

二进制大文件。M 表示最大列长度,单位是字节,范围是 0 到 65535。

BLOB[(M)]

TINYBLOB 类型

类似于 ,区别在于最大列长度为 255。

TINYBLOB

MEDIUMBLOB 类型

类似于 ,区别在于最大列长度为 16777215。

MEDIUMBLOB

LONGBLOB 类型

类似于 ,区别在于最大列长度为 4,294,967,295。

LONGBLOB

ENUM 类型

枚举类型是一个字符串,它只能有一个值的字符串对象。其值必须是从一个固定集合中选取,这个固定集合在创建表的时候定义,语法是:

ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:

ENUM('apple', 'orange', 'pear')

枚举类型的值在 TiDB 内部使用数值来存储,每个值会按照定义的顺序转换为一个数字,比如上面的例子中,每个字符串值都会映射为一个数字:

数字
NULLNULL
''0
'apple'1
'orange'2
'pear'3

更多信息参考 MySQL 枚举文档

SET 类型

集合类型是一个包含零个或多个值的字符串,其中每个值必须是从一个固定集合中选取,这个固定集合在创建表的时候定义,语法是:

SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:

SET('1', '2') NOT NULL

上面的例子中,这列的有效值可以是:

''
'1'
'2'
'1,2'

集合类型的值在 TiDB 内部会转换为一个 Int64 数值,每个元素是否存在用一个二进制位的 0/1 值来表示,比如这个例子 SET('a','b','c','d'),每一个元素都被映射为一个数字,且每个数字的二进制表示只会有一位是 1:

成员十进制表示二进制表示
'a'10001
'b'20010
'c'40100
'd'81000

这样对于值为 ('a', 'c') 的元素,其二进制表示即为 0101。

更多信息参考 MySQL 集合文档

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文