# 11.3.1 字符串数据类型语法
字符串数据类型是字符
,VARCHAR
,二进制
,变量
,斑点
,文本
,枚举
, 和放
.
在某些情况下,MySQL 可能会将字符串列更改为不同于创建表
要么更改表
陈述。看第 13.1.20.7 节,“静默列规范更改”.
对于字符串列的定义(字符
,VARCHAR
, 和文本
types),MySQL以字符单位解释长度规范。对于二进制字符串列的定义(二进制
,变量
, 和斑点
types),MySQL以字节为单位解释长度规范。
字符串数据类型的列定义字符
,VARCHAR
, 这文本
类型,枚举
,放
, 和任何同义词)可以指定列字符集和排序规则:
字符集
指定字符集。如果需要,可以使用整理
属性,以及任何其他属性。例如:CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );
此表定义创建一个名为
c1
有一个字符集utf8
使用该字符集的默认排序规则,以及名为c2
有一个字符集拉丁语1
和区分大小写的 (_cs
) 整理。当其中一个或两个时分配字符集和排序规则的规则
字符集
和整理
属性缺失在第 10.3.5 节,“列字符集和排序规则”.字符集
是同义词字符集
.指定
字符集二进制
字符串数据类型的属性导致将列创建为相应的二进制字符串数据类型:字符
变成二进制
,VARCHAR
变成变量
, 和文本
变成斑点
.为了枚举
和放
数据类型,这不会发生;它们是按声明创建的。假设您使用此定义指定一个表: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 );
这
二进制
属性是一个非标准的 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 中,这种非标准的使用
二进制
属性不明确,因为utf8mb4
字符集有多个_bin
排序规则。从 MySQL 8.0.17 开始,二进制
属性已被弃用,您应该期望在未来版本的 MySQL 中删除对它的支持。应调整应用程序以使用显式_bin
而是整理。指某东西的用途
二进制
指定数据类型或字符集保持不变。这
ASCII
属性是简写字符集 latin1
.在较旧的 MySQL 版本中受支持,ASCII
在 MySQL 8.0.28 及更高版本中已弃用;采用字符集
反而。这
统一码
属性是简写字符集 ucs2
.在较旧的 MySQL 版本中受支持,统一码
在 MySQL 8.0.28 及更高版本中已弃用;采用字符集
反而。字符列比较和排序基于分配给列的排序规则。为了
字符
,VARCHAR
,文本
,枚举
, 和放
数据类型,您可以使用二进制 (_bin
)整理还是二进制的
属性使比较和排序使用底层字符代码值,而不是词法排序。有关在MySQL中使用字符集的更多信息,请参阅第十章,字符集、排序规则、Unicode.
[国家]字符[(*
M*)][字符集]*
charset_名称*][整理]*
排序规则名称*]
一种固定长度的字符串,在存储时总是用空格填充到指定长度。*
M
以字符表示列长度。范围M
是0到255。如果M
*省略,长度为1。笔记
当
烧焦
除非PAD_CHAR_至_全长
SQL模式已启用。烧焦
是性格
.全国字符
(或其等效的缩写形式,恩查尔
)是定义烧焦
列应该使用一些预定义的字符集。MySQL使用utf8
作为这个预定义的字符集。第10.3.7节,“民族性格集”.这个
字符字节
数据类型是二进制的
数据类型。这是一个兼容性功能。MySQL允许您创建类型为
字符(0)
。这主要在您必须兼容依赖于列的存在但实际上没有使用其值的旧应用程序时有用。字符(0)
当您需要一个只能接受两个值的列时,它也非常好:一个定义为CHAR(0)NULL
只占用一位,只能获取值无效的
和''
(空字符串)。[国家]瓦尔查尔(*
M*)[字符集]*
charset_名称*][整理]*
排序规则名称*]
长度可变的字符串。*
M
表示最大列长度(以字符为单位)。范围M
*是0到65535。一条直线的有效最大长度瓦尔查尔
取决于最大行大小(65535字节,在所有列中共享)和使用的字符集。例如utf8
每个字符最多需要三个字节,因此瓦尔查尔
使用utf8
字符集最多可以声明为21844个字符。看见第8.4.7节,“表列计数和行大小的限制”.MySQL商店
瓦尔查尔
值作为1字节或2字节长度前缀加上数据。长度前缀表示值中的字节数。A.瓦尔查尔
如果值不需要超过255字节,则列使用一个长度字节;如果值可能需要超过255字节,则列使用两个长度字节。笔记
MySQL遵循标准SQL规范,并且不从中删除尾随空格
瓦尔查尔
价值观瓦尔查尔
是性格多变
.国家瓦查尔酒店
是定义瓦尔查尔
列应该使用一些预定义的字符集。MySQL使用utf8
作为这个预定义的字符集。第10.3.7节,“民族性格集”.女巫
是国家瓦查尔酒店
.-
这个
二进制的
类型与烧焦
类型,但存储二进制字节字符串,而不是非二进制字符串。可选长度*M
表示以字节为单位的列长度。如果省略,米
*默认为 1。 -
一种
斑点
最大长度为 255 的列(28− 1) 字节。每个小斑点
value 使用 1 字节长度前缀存储,该前缀指示 value 中的字节数。 TINYTEXT [字符集 *
字符集名称*] [整理*
collation_name*]
一种
文本
最大长度为 255 的列(28− 1) 字符。如果值包含多字节字符,则有效最大长度会更小。每个小文本
value 使用 1 字节长度前缀存储,该前缀指示 value 中的字节数。-
一种
斑点
最大长度为 65,535 的列(216− 1) 字节。每个斑点
value 使用 2 字节长度前缀存储,该前缀指示 value 中的字节数。可选长度*
米
可以给这种类型。如果这样做了,MySQL 会将列创建为最小的列斑点
键入足够大以容纳值米
*字节长。 文本[(*
米*)] [字符集 *
字符集名称*] [整理*
collation_name*]
一种
文本
最大长度为 65,535 的列(216− 1) 字符。如果值包含多字节字符,则有效最大长度会更小。每个文本
value 使用 2 字节长度前缀存储,该前缀指示 value 中的字节数。可选长度*
米
可以给这种类型。如果这样做了,MySQL 会将列创建为最小的列文本
键入足够大以容纳值米
*长字符。-
一种
斑点
最大长度为 16,777,215 的列(224− 1) 字节。每个中块
value 使用 3 字节长度前缀存储,该前缀指示 value 中的字节数。 中文本 [字符集 *
字符集名称*] [整理*
collation_name*]
一种
文本
最大长度为 16,777,215 的列(224− 1) 字符。如果值包含多字节字符,则有效最大长度会更小。每个中文本
value 使用 3 字节长度前缀存储,该前缀指示 value 中的字节数。-
一种
斑点
最大长度为 4,294,967,295 或 4GB(232− 1) 字节。有效最大长度长块
列取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个长块
value 使用 4 字节长度前缀存储,该前缀指示 value 中的字节数。 长文本 [字符集 *
字符集名称*] [整理*
collation_name*]
一种
文本
最大长度为 4,294,967,295 或 4GB(232− 1) 字符。如果值包含多字节字符,则有效最大长度会更小。有效最大长度长文
列还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。每个长文
value 使用 4 字节长度前缀存储,该前缀指示 value 中的字节数。枚举('*
价值1*','*
价值2*',...) [字符集 *
字符集名称*] [整理*
collation_name*]
一个枚举。一个只能有一个值的字符串对象,从值列表中选择
'*
价值1*'
,'*
价值2*'
,...
,空值
或特殊的''
错误值。枚举
值在内部表示为整数。一个
枚举
列最多可以有 65,535 个不同的元素。个人最大支持长度
枚举
元素是*米
\<= 255 和 (米
xw
) \<= 1020, 其中米
是元素文字长度和w
*是字符集中最大长度字符所需的字节数。放('*
价值1*','*
价值2*',...) [字符集 *
字符集名称*] [整理*
collation_name*]
一套。可以有零个或多个值的字符串对象,每个值都必须从值列表中选择
'*
价值1*'
,'*
价值2*'
,...
放
值在内部表示为整数。一种
放
列最多可以有 64 个不同的成员。个人最大支持长度
放
元素是*米
\<= 255 和 (米
* xw
) \<= 1020, 其中米
是元素文字长度和*w
*是字符集中最大长度字符所需的字节数。