字符串数据类型语法
字符串数据类型CHAR
,VARCHAR
,BINARY
,VARBINARY
,BLOB
,TEXT
,ENUM
,和SET
。
在某些情况下,MySQL可能会将字符串列更改为与CREATE TABLE
or ALTER TABLE
语句中给出的类型不同的类型。请参见“静音色谱柱规格更改”。
对于字符串列(CHAR
,VARCHAR
和TEXT
类型)的定义,MySQL以字符单位解释长度规范。对于二进制字符串列(BINARY
,VARBINARY
和BLOB
类型)的定义,MySQL以字节为单位解释长度规范。
用于字符串的数据类型列定义CHAR
,VARCHAR
的TEXT
类型,ENUM
,SET
,和任何同义词)可以指定列的字符集和归类:
CHARACTER SET
指定字符集。如果需要,可以使用COLLATE
属性以及任何其他属性指定字符集的校验规则。例如:CREATE TABLE t ( c1 VARCHAR(20)CHARACTER SET utf8, c2 TEXTCHARACTER SET latin1COLLATE latin1_general_cs );该表定义创建一个名为的列
c1
,该列的字符集具有该字符集utf8
的默认校验规则,以及一个名为的列c2
,其字符集为latin1
且区分大小写(_cs
)校验规则。“列字符集和校验规则”中介绍了在缺少
CHARACTER SET
和COLLATE
属性之一或两者都缺失时分配字符集和校验规则的规则。CHARSET
是的同义词CHARACTER SET
。CHARACTER SET binary
为字符串数据类型指定属性会导致将列创建为对应的二进制字符串数据类型:CHAR
变为BINARY
,VARCHAR
变为VARBINARY
和TEXT
变为BLOB
。对于ENUM
和SET
数据类型,这不会发生;它们是按声明创建的。假设您使用此定义指定一个表:CREATE TABLE t ( c1 VARCHAR(10)CHARACTER SET binary, c2 TEXTCHARACTER 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 latin1COLLATE latin1_bin, c2 TEXTCHARACTER SET utf8mb4COLLATE 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
。
字符列的比较和校验基于分配给该列的校验规则。对于CHAR
,VARCHAR
,TEXT
,ENUM
,和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
是的简写CHARACTER
。NATIONAL CHAR
(或等效的简短格式NCHAR
)是定义CHAR
列应使用某些预定义字符集的标准SQL方法。MySQL使用utf8
此预定义字符集。“国家字符集”。CHAR BYTE
数据类型是用于一个别名BINARY
的数据类型。这是一项兼容性功能。MySQL允许您创建type的列
CHAR(0)
。这主要在您必须符合依赖于列的存在但实际上不使用其值的旧应用程序时很有用。CHAR(0)
当您需要只能包含两个值的列时,它也非常好:被定义为的列CHAR(0)NULL
仅占用一位,并且只能接受值NULL
and''
(空字符串)。[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 VARYING
。NATIONAL 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并且(M
xw
)<= 1020,其中M
是元素的字面长度,并且w
是字符集中最大长度字符所需的字节数。SET('value1','value2',...)[CHARACTER SET charset_name][COLLATE collation_name]
一套。一个字符串对象,该对象可以具有零个或多个值,每个都必须从值的列表中选择,,值在内部表示为整数。
'value1'
'value2'
...
SET
一
SET
列最多可包含64个不同的成员。单个
SET
元素的最大支持长度为M
<= 255并且(M
xw
)<= 1020,其中M
是元素的字面长度,并且w
是字符集中最大长度字符所需的字节数。