• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 字符串数据类型语法

    字符串数据类型CHARVARCHARBINARYVARBINARYBLOBTEXTENUM,和SET

    在某些情况下,MySQL可能会将字符串列更改为与CREATE TABLEor ALTER TABLE语句中给出的类型不同的类型。请参见“静音色谱柱规格更改”。

    对于字符串列(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,其字符集为latin1且区分大小写(_cs)校验规则。

      “列字符集和校验规则”中介绍了在缺少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
    • UNICODE属性是的简写CHARACTER SET ucs2

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

    有关在MySQL中使用字符集的更多信息,请参见字符集,归类,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方法。MySQL使用utf8此预定义字符集。“国家字符集”。

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

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

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

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

      MySQL将VARCHAR值存储为1字节或2字节长的前缀以及数据。长度前缀指示值中的字节数。VARCHAR如果值要求不超过255个字节,则一列使用一个长度字节;如果值可能需要不超过255个字节,则一列使用两个长度字节。

      注意

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

      VARCHAR是的简写CHARACTER VARYINGNATIONAL VARCHAR是定义VARCHAR列应使用某些预定义字符集的标准SQL方法。MySQL使用utf8此预定义字符集。“国家字符集”。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列,最大长度为65,535(2 16 − 1)个字节。每个BLOB值使用2字节长的前缀存储,该前缀指示值中的字节数。

      M可以为此类型指定一个可选的长度。如果这样做,MySQL将创建该列为最小的BLOB类型,该类型的大小足以容纳值M字节长。

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

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

      M可以为此类型指定一个可选的长度。如果这样做,MySQL将创建该列为最小的TEXT类型,该类型的大小足以容纳值M字符。

    • MEDIUMBLOB

      BLOB列,最大长度为16,777,215(2 24 − 1)字节。每个MEDIUMBLOB值使用3字节长的前缀存储,该前缀指示值中的字节数。

    • MEDIUMTEXT[CHARACTER SET charset_name][COLLATE collation_name]

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

    • LONGBLOB

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

    • LONGTEXT[CHARACTER SET charset_name][COLLATE collation_name]

      TEXT列,最大长度为4,294,967,295或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并且(Mx w)<= 1020,其中M是元素的字面长度,并且w是字符集中最大长度字符所需的字节数。

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

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

      SET列最多可包含64个不同的成员。

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