• 字符串类型
    • 类型定义
      • CHAR 类型
      • VARCHAR 类型
      • TEXT 类型
      • TINYTEXT 类型
      • MEDIUMTEXT 类型
      • LONGTEXT 类型
      • BINARY 类型
      • VARBINARY 类型
      • TINYBLOB 类型
      • BLOB 类型
      • MEDIUMBLOB 类型
      • LONGBLOB 类型
      • ENUM 类型
      • SET 类型

    字符串类型

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

    类型定义

    CHAR 类型

    定长字符串。CHAR 列的长度固定为创建表时声明的长度。长度可以为从 0 到 255 的任何值。当保存 CHAR 值时,在它们的右边填充空格以达到指定的长度。

    {{< copyable “sql” >}}

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

    VARCHAR 类型

    变长字符串。M 表示最大列长度,范围是 0 到 65535。VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定。

    {{< copyable “sql” >}}

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

    TEXT 类型

    文本串。M 表示最大列长度,范围是 0 到 65535。TEXT 的最大实际长度由最长的行的大小和使用的字符集确定。

    {{< copyable “sql” >}}

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

    TINYTEXT 类型

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

    {{< copyable “sql” >}}

    1. TINYTEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

    MEDIUMTEXT 类型

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

    {{< copyable “sql” >}}

    1. MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    LONGTEXT 类型

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

    {{< copyable “sql” >}}

    1. LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    BINARY 类型

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

    {{< copyable “sql” >}}

    1. BINARY(M)

    VARBINARY 类型

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

    {{< copyable “sql” >}}

    1. VARBINARY(M)

    TINYBLOB 类型

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

    {{< copyable “sql” >}}

    1. TINYBLOB

    BLOB 类型

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

    {{< copyable “sql” >}}

    1. BLOB[(M)]

    MEDIUMBLOB 类型

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

    {{< copyable “sql” >}}

    1. MEDIUMBLOB

    LONGBLOB 类型

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

    {{< copyable “sql” >}}

    1. LONGBLOB

    ENUM 类型

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

    {{< copyable “sql” >}}

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

    例如:

    {{< copyable “sql” >}}

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

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

    数字
    NULL NULL
    ‘’ 0
    ‘apple’ 1
    ‘orange’ 2
    ‘pear’ 3

    更多信息参考 MySQL 枚举文档。

    SET 类型

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

    {{< copyable “sql” >}}

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

    例如:

    {{< copyable “sql” >}}

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

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

    1. ''
    2. '1'
    3. '2'
    4. '1,2'

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

    成员 十进制表示 二进制表示
    ‘a’ 1 0001
    ‘b’ 2 0010
    ‘c’ 4 0100
    ‘d’ 8 1000

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

    更多信息参考 MySQL 集合文档。