暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[ACDU 翻译] MySQL 11.3.1 字符串数据类型语法

原创 由迪 2021-12-31
1006

字符串数据类型CHARVARCHARBINARYVARBINARYBLOBTEXTENUM,和 SET

在某些情况下,MySQL 可能会将字符串列更改为与CREATE TABLEorALTER TABLE 语句中给出的类型不同的类型。请参阅第 13.1.20.7 节,“无提示的色谱柱规格更改”

对于字符串列(CHARVARCHARTEXT类型)的定义,MySQL 以字符为单位解释长度规范。对于二进制字符串列(BINARYVARBINARYBLOB类型)的定义,MySQL 以字节为单位解释长度规范。

用于字符串的数据类型列定义 CHARVARCHARTEXT类型, ENUMSET,和任何同义词)可以指定列的字符集和归类:

  • CHARACTER SET指定字符集。如果需要,可以使用COLLATE属性以及任何其他属性指定字符集的排序规则。例如:

    CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );

    此表定义创建一个名为的列c1,该列 的字符集 utf8为该字符集的默认排序规则,以及一个名为的列,该列c2具有字符集 oflatin1和区分大小写 ( _cs) 的排序规则。

    第 10.3.5 节“列字符集和排序规则”中描述了在缺少CHARACTER SETCOLLATE属性中的 一个或两个时分配字符集和排序规则的规则

    CHARSET是 的同义词 CHARACTER SET

  • 指定CHARACTER SET binary 字符串数据类型的属性会导致将列创建为相应的二进制字符串数据类型: CHAR变成 BINARYVARCHAR变成 VARBINARYTEXT变成 BLOB。对于 ENUMSET数据类型,这不会发生;它们是按照声明创建的。假设您使用以下定义指定一个表:

    CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );

    结果表具有以下定义:

    CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary );
  • BINARY属性是一个非标准的 MySQL 扩展,它是指定_bin列字符集(或如果未指定列字符集的表默认字符集)的二进制 ( ) 排序规则的简写。在这种情况下,比较和排序基于数字字符代码值。假设您使用以下定义指定一个表:

    CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 BINARY, c2 TEXT BINARY ) CHARACTER SET utf8mb4;

    结果表具有以下定义:

    CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin, c2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ) CHARACTER SET utf8mb4;

    在 MySQL 8.0 中,BINARY属性的这种非标准使用 是不明确的,因为 utf8mb4字符集有多个 _bin排序规则。从 MySQL 8.0.17 开始,该 BINARY属性已被弃用,您应该期望在未来版本的 MySQL 中删除对它的支持。应调整应用程序以改为使用显式_bin排序规则。

    BINARY用于指定数据类型或字符集 的用法保持不变。

  • ASCII属性是 的简写 CHARACTER SET latin1。在较旧的 MySQL 版本中受支持,ASCII在 MySQL 8.0.28 及更高版本中已弃用;使用CHARACTER SET 来代替。

  • UNICODE属性是 的简写 CHARACTER SET ucs2。在较旧的 MySQL 版本中受支持,UNICODE在 MySQL 8.0.28 及更高版本中已弃用;使用CHARACTER SET 来代替。

字符列比较和排序基于分配给列的排序规则。对于 CHARVARCHARTEXTENUM,和 SET数据类型,可以使用二进制(声明一个柱_bin)归类或所述 BINARY属性原因比较和排序,以使用底层字符代码值,而不是一个词汇顺序。

有关在 MySQL 中使用字符集的其他信息,请参阅第 10 章,字符集、排序规则、Unicode

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

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

    笔记

    CHAR除非PAD_CHAR_TO_FULL_LENGTH 启用了SQL 模式,否则检索值 时会删除尾随空格 。

    CHAR是 的简写 CHARACTERNATIONAL CHAR(或其等效的缩写形式,NCHAR)是定义CHAR列应使用某些预定义字符集的标准 SQL 方式 。MySQLutf8 用作此预定义字符集。 第 10.3.7 节,“国家字符集”

    CHAR BYTE数据类型是用于一个别名BINARY的数据类型。这是一个兼容性功能。

    MySQL 允许您创建类型为 的列 CHAR(0)。这主要在您必须符合依赖于列的存在但实际上不使用其值的旧应用程序时很有用。CHAR(0)当您需要一个只能取两个值的列时,它也非常好:定义为的列CHAR(0) NULL仅占用一位并且只能取值 NULL''(空字符串)。

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

    一个可变长度的字符串。M 表示以字符为单位的最大列长度。的范围*M*是 0 到 65,535。a 的有效最大长度 VARCHAR受最大行大小(65,535 字节,在所有列之间共享)和使用的字符集的约束。例如, utf8每个字符最多需要三个字节,因此可以将VARCHAR使用该utf8字符集的 列 声明为最多 21,844 个字符。请参阅 第 8.4.7 节,“表列数和行大小的限制”

    MySQL 将VARCHAR值存储为 1 字节或 2 字节长度的前缀加数据。长度前缀表示值中的字节数。甲 VARCHAR列使用一个长度字节的值,如果不需要超过255字节,2个字节长度值是否可能需要多于255个字节。

    笔记

    MySQL的遵从标准SQL规范,并 没有从删除尾随空格 VARCHAR的值。

    VARCHAR是 的简写 CHARACTER VARYINGNATIONAL VARCHAR是定义VARCHAR列应使用某些预定义字符集的标准 SQL 方法 。MySQL utf8用作此预定义字符集。 第 10.3.7 节,“国家字符集”NVARCHAR是 的简写 NATIONAL VARCHAR

  • BINARY[(*M*)\]

    BINARY类型是类似的CHAR类型,但保存二进制字节字符串而不非二进制字符串。可选长度*M*表示以字节为单位的列长度。如果省略,则 *M*默认为 1。

  • VARBINARY(*M*)

    VARBINARY类型是类似的VARCHAR类型,但保存二进制字节字符串而不非二进制字符串。*M*表示以字节为单位的最大列长度。

  • TINYBLOB

    BLOB为255字节的最大长度塔(2 8 - 1)个字节。每个TINYBLOB值都使用 1 字节长度的前缀存储,该前缀指示值中的字节数。

  • TINYTEXT [CHARACTER SET *charset_name*\] [COLLATE *collation_name*]

    TEXT与255(2的最大长度列8个字符- 1)。如果值包含多字节字符,则有效最大长度更小。每个 TINYTEXT值都使用 1 字节长度的前缀存储,该前缀指示值中的字节数。

  • BLOB[(*M*)\]

    BLOB具有65535的最大长度塔(2 16 - 1)个字节。每个BLOB值都使用 2 字节长度的前缀存储,该前缀指示值中的字节数。

    *M可以为此类型 提供可选长度。如果这样做,MySQLBLOB会将列创建为足够大的最小类型,以容纳值M*字节长。

  • TEXT[(*M*)\] [CHARACTER SET *charset_name*] [COLLATE *collation_name*]

    TEXT用的65,535(2的最大长度列16个字符- 1)。如果值包含多字节字符,则有效最大长度更小。每个 TEXT值都使用 2 字节长度的前缀存储,该前缀指示值中的字节数。

    M可以为此类型 提供可选长度。如果这样做,MySQLTEXT会将列创建为足够大的最小类型,以容纳值M 字符的长度。

  • MEDIUMBLOB

    BLOB16,777,215个最大长度塔(2 24 - 1)个字节。每个MEDIUMBLOB 值都使用 3 字节长度的前缀存储,该前缀指示值中的字节数。

  • MEDIUMTEXT [CHARACTER SET *charset_name*\] [COLLATE *collation_name*]

    TEXT16,777,215个(2的最大长度列24个字符- 1)。如果值包含多字节字符,则有效最大长度会更小。每个 MEDIUMTEXT值都使用 3 字节长度的前缀存储,该前缀指示值中的字节数。

  • LONGBLOB

    BLOB与4294967295或4GB(2的最大长度柱32 - 1)字节。LONGBLOB列的有效最大长度 取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个 LONGBLOB值都使用 4 字节长度的前缀存储,该前缀指示值中的字节数。

  • LONGTEXT [CHARACTER SET *charset_name*\] [COLLATE *collation_name*]

    TEXT与4294967295或4GB(2最大长度柱32的人物- 1)。如果值包含多字节字符,则有效最大长度会更小。LONGTEXT 列的有效最大长度 还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个 LONGTEXT 值都使用 4 字节长度的前缀存储,该前缀指示值中的字节数。

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

    一个枚举。的字符串对象,它只能有一个值,从值列表中选择 , , ,或特殊的误差值。 值在内部表示为整数。 '*value1*'``'*value2*'``...``NULL``''ENUM

    ENUM列最多可以有 65,535 个不同的元素。

    单个ENUM元素支持的最大长度 为 M<= 255 且 ( *M*x w) <= 1020,其中 M是元素文字长度, *w*是字符集中最大长度字符所需的字节数。

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

    一套。一个字符串对象,该对象可以具有零个或多个值,每个都必须从值的列表中选择 , , 值在内部表示为整数。 '*value1*'``'*value2*'``... SET

    一个SET列最多可以有 64 个不同的成员。

    单个SET元素支持的最大长度 为 M<= 255 且 ( *M*x w) <= 1020,其中 M是元素文字长度, *w*是字符集中最大长度字符所需的字节数。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论