字符串数据类型为字符
,VARCHAR
,二进制
,VARBINARY
,团
,文本
,枚举
,集
.
在某些情况下,MySQL可能会将字符串列更改为不同于类中给出的类型创建表
或ALTER TABLE
声明。看到第13.1.20.7节“静默列规格更改”.
有关字符串列的定义(字符
,VARCHAR
,以及文本
类型),MySQL以字符单位解释长度规范。有关二进制字符串列的定义(二进制
,VARBINARY
,以及团
类型),MySQL以字节单位解释长度规范。
字符串数据类型的列定义字符
,VARCHAR
,文本
类型,枚举
,集
,和任何同义词)可以指定列的字符集和排序规则:
字符集
指定字符集。属性指定字符集的排序规则(如果需要)核对
属性,以及任何其他属性。例如:创建表t (c1 VARCHAR(20) CHARACTER SET utf8, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs);
此表定义创建名为
c1
它有一个字符集use utf8
使用该字符集的默认排序规则,以及名为c2
它有一个字符集latin1
以及区分大小写的(_cs
)排序。指定字符集和排序规则的规则
字符集
和核对
属性中所描述的第10.3.5节“列字符集和排序规则”.字符集
是同义词吗字符集
.指定
字符集二进制
属性将导致该列创建为对应的二进制字符串数据类型:字符
就变成了二进制
,VARCHAR
就变成了VARBINARY
,文本
就变成了团
.为枚举
而且集
数据类型,这不会发生;它们是按照声明创建的。假设你用下面的定义指定一个表:创建表t (c1 VARCHAR(10)字符集二进制,c2 TEXT字符集二进制,c3 ENUM('a','b','c')字符集二进制);
结果表有这样的定义:
CREATE TABLE t (c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary);
的
二进制
属性是一个非标准的MySQL扩展,它是指定二进制(_bin
)列字符集的排序规则(如果没有指定列字符集,则为表默认字符集)。在本例中,比较和排序基于数字字符代码值。假设你用下面的定义指定一个表:创建表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中,这种非标准的使用
二进制
属性是模糊的,因为utf8mb4
字符集有多个_bin
排序。从MySQL 8.0.17开始,二进制
属性已弃用,你应该期望在MySQL的未来版本中删除对它的支持。应用程序应该调整为使用显式_bin
排序。使用
二进制
来指定数据类型或字符集保持不变。的
美国信息交换标准代码
属性是对字符集拉丁文1
.旧版MySQL支持,美国信息交换标准代码
在MySQL 8.0.28及以后版本中已弃用;使用字符集
代替。的
UNICODE
属性是对字符集ucs2
.旧版MySQL支持,UNICODE
在MySQL 8.0.28及以后版本中已弃用;使用字符集
代替。
字符列比较和排序基于分配给列的排序规则。为字符
,VARCHAR
,文本
,枚举
,集
数据类型时,可以使用二进制(_bin
)整理或二进制
属性导致比较和排序使用底层字符代码值而不是词法排序。
有关在MySQL中使用字符集的更多信息,请参见第十章,字符集,排序规则,Unicode.
(国家)CHAR ((
米
)][字符集charset_name
][核对collation_name
]一种固定长度的字符串,在存储时始终用指定长度的空格右填充。
米
表示以字符为单位的列长度。的范围米
0 ~ 255。如果米
省略时,长度为1。请注意当
字符
值被检索,除非PAD_CHAR_TO_FULL_LENGTH
启用SQL模式。字符
是简写字符
.国家的字符
(或其等效的简写形式,NCHAR
)是定义a的标准SQL方法字符
列应该使用一些预定义的字符集。MySQL使用use utf8
如此预定义字符集。第10.3.7节“国家字符集”.MySQL允许您创建类型的列
CHAR (0)
.当您必须与依赖于某个列的存在但实际上并不使用其值的旧应用程序兼容时,这非常有用。CHAR (0)
当您需要一个只能取两个值的列时,也是相当不错的CHAR(0)为空
只占用1位,只能取值零
而且”
(空字符串)。(国家)VARCHAR (
米
)[字符集charset_name
][核对collation_name
]可变长度的字符串。
米
表示以字符为单位的最大列长度。的范围米
0 ~ 65,535。的有效最大长度VARCHAR
取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。例如,use utf8
字符每个字符最多需要三个字节,因此aVARCHAR
列,该列使用use utf8
字符集最多可以声明为21,844个字符。看到第8.4.7节,“表列数和行大小的限制”.MySQL存储
VARCHAR
值为1字节或2字节长度前缀加上数据。长度前缀表示值的字节数。一个VARCHAR
如果值不超过255字节,列使用一个长度字节,如果值可能需要超过255字节,则使用两个长度字节。请注意MySQL遵循标准SQL规范,并且做到了不删除尾随空格
VARCHAR
值。VARCHAR
是简写性格不同
.国家VARCHAR
标准的SQL方法是定义aVARCHAR
列应该使用一些预定义的字符集。MySQL使用use utf8
如此预定义字符集。第10.3.7节“国家字符集”.NVARCHAR
是简写国家VARCHAR
.的
二进制
类型类似于字符
类型,但存储二进制字节字符串而不是非二进制字符串。长度可选米
表示以字节为单位的列长度。如果省略了,米
默认值为1。的
VARBINARY
类型类似于VARCHAR
类型,但存储二进制字节字符串而不是非二进制字符串。米
表示以字节为单位的最大列长度。Tinytext[字符集
charset_name
][核对collation_name
]一个
文本
最大长度为255 (28−1)字符。如果值包含多字节字符,则有效最大长度较小。每一个非常小的文本串
值使用1字节长度的前缀存储,该前缀表示值中的字节数。一个
团
列,最大长度为65,535 (216−1)字节。每一个团
值使用2字节长度的前缀存储,该前缀表示值中的字节数。长度可选
米
可以给出这种类型。如果这样做,MySQL将创建最小的列团
输入足够大的值米
个字节长。文本((
米
)][字符集charset_name
][核对collation_name
]一个
文本
列,最大长度为65,535 (216−1)字符。如果值包含多字节字符,则有效最大长度较小。每一个文本
值使用2字节长度的前缀存储,该前缀表示值中的字节数。长度可选
米
可以给出这种类型。如果这样做,MySQL将创建最小的列文本
输入足够大的值米
字符长。一个
团
列的最大长度为16,777,215 (224−1)字节。每一个MEDIUMBLOB
值使用3字节长度的前缀存储,该前缀表示值中的字节数。Mediumtext[字符集
charset_name
][核对collation_name
]一个
文本
列的最大长度为16,777,215 (224−1)字符。如果值包含多字节字符,则有效最大长度较小。每一个简单
值使用3字节长度的前缀存储,该前缀表示值中的字节数。一个
团
列,最大长度为4,294,967,295或4GB (232−1)字节。的有效最大长度LONGBLOB
列取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每一个LONGBLOB
值使用4字节长度的前缀存储,该前缀表示值中的字节数。长文本[字符集
charset_name
][核对collation_name
]一个
文本
列,最大长度为4,294,967,295或4GB (232−1)字符。如果值包含多字节字符,则有效最大长度较小。的有效最大长度量变
列还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每一个量变
值使用4字节长度的前缀存储,该前缀表示值中的字节数。枚举('
value1
”、“value2
',…)[字符集charset_name
][核对collation_name
]枚举。只能有一个值的字符串对象,从值列表中选择
'
,value1
''
,value2
'...
,零
或者特色菜”
错误值。枚举
值在内部表示为整数。一个
枚举
列最多可以有65,535个不同的元素。一个人的最大支持长度
枚举
元素是米
<= 255 and (米
xw
) <= 1020,其中米
元素是字面长度和w
字符集中最大长度字符所需的字节数。设置(“
value1
”、“value2
',…)[字符集charset_name
][核对collation_name
]一组。可以有零个或多个值的字符串对象,每个值必须从值列表中选择
'
,value1
''
,value2
'...
集
值在内部表示为整数。一个
集
列最多可以有64个不同的成员。一个人的最大支持长度
集
元素是米
<= 255 and (米
xw
) <= 1020,其中米
元素是字面长度和w
字符集中最大长度字符所需的字节数。