排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
MySQL数据类型 - 字符串数据类型(1)
MySQL数据类型 - 字符串数据类型(1)
林员外聊编程
2020-06-28
691
1.
字符串数据类型语法
字符串数据类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
在某些情况下,MySQL可能会将字符串列更改为不同于CREATE TABLE或ALTER TABLE语句中定义的类型。
对于字符字符串列(CHAR、VARCHAR和TEXT类型)的定义,MySQL以字符为单位计算长度。对于二进制字符串列(BINARY、VARBINARY和BLOB类型)的定义,MySQL以字节为单位计算长度。
字符字符串数据类型CHAR、VARCHAR、TEXT类型、ENUM、SET和任何同义词的列定义,可以指定列字符集和排序规则:
●
CHARACTER SET指定字符集。如果需要,可以使用COLLATE属性和其他属性指定字符集的排序规则。例如:
此表创建了一个名为c1的列,该列的字符集为utf8,使用该字符集的默认排序规则;创建一个名为c2的列,该列的字符集为latin1,并且使用区分大小写的(_cs)排序规则。
CHARSET和CHARACTER SET是同义词。
●
为字符字符串数据类型指定CHARACTER SET binary属性会导致将列创建为相应的二进制字符串数据类型:CHAR变为BINARY,VARCHAR变为VARBINARY,TEXT变为BLOB。对于ENUM和SET数据类型,不会发生这种情况;它们是按声明创建的。
假设您使用如下定义创建一个表:
会得到如下所示结果表定义:
●
BINARY属性是一个非标准的MySQL扩展,它是指定列字符集(如果未指定列字符集,则为表默认字符集)的二进制(_bin)排序规则的简写。在这种情况下,比较和排序基于数字字符代码值。
假设使用如下定义创建表:
结果表具有以下定义:
在MySQL 8.0中,BINARY属性的这种非标准用法会造成歧义,因为utf8mb4字符集有多个二进制排序规则。从MySQL 8.0.17开始,不推荐使用BINARY属性,在以后的MySQL版本中将不再支持它。应用程序应该调整为使用显式的_bin排序规则。
使用BINARY来指定数据类型或字符集保持不变。
●
ASCII属性是CHARACTER SET latin1的缩写。
●
UNICODE属性是CHARACTER SET ucs2的缩写。
字符列基于分配给该列的排序规则进行比较和排序。对于CHAR、VARCHAR、TEXT、ENUM和SET数据类型,可以使用binary(_bin)排序规则或BINARY属性声明列,以使比较和排序使用基础字符代码值,而不是词法顺序。
●
[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允许创建CHAR(0)类型的列。当必须兼容旧有的应用程序,而旧程序依赖于一个列,但实际上又并不使用列的值,这时CHAR(0)非常有用。当您需要一个只能接受两个值的列时,CHAR(0)也很有用:定义为CHAR(0) NULL的列只占用一位,并且只能接受NULL和''(空字符串)的值。
●
[NATIONAL] VARCHAR(
M
) [CHARACTER SET
charset_name
] [COLLATE
collation_name
]
可变长度字符串。M表示以字符为单位的最大列长。M的范围是0到65535。VARCHAR的最大有效长度取决于最大行大小(65535字节,在所有列之间共享)和使用的字符集。例如,utf8字符每字符最多需要3个字节,因此使用utf8字符集的VARCHAR列可以最多声明21844个字符。
MySQL将VARCHAR值存储为1字节或2字节长度的前缀加上数据。长度前缀指示值中的字节数。如果值要求的字节数不超过255,则VARCHAR列使用一个长度字节;如果值要求的字节数可能超过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
最大长度为255(
2
8
− 1
)字节的BLOB列。每个TINYBLOB值都使用一个1字节长度的前缀来指示值中的字节数。
●
TINYTEXT [CHARACTER SET
charset_name
] [COLLATE
collation_name
]
最大长度为255(
2
8
-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TINYTEXT值都使用一个1字节长度的前缀来指示值中的字节数。
●
BLOB[(
M
)]
最大长度为65535(
2
16
-1)字节的BLOB列。每个BLOB值都使用一个2字节长度的前缀来指示值中的字节数。
对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M字节长的最小BLOB类型列。
●
TEXT[(
M
)] [CHARACTER SET
charset_name
] [COLLATE
collation_name
]
最大长度为65535(
2
16
-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TEXT值都使用2字节长度的前缀指示值中的字节数。
对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M个字符的最小TEXT类型列。
●
MEDIUMBLOB
最大长度为16777215(
2
24
-1)字节的BLOB列。每个MEDIUMBLOB值都使用一个3字节长度的前缀来存储值的字节数。
●
MEDIUMTEXT [CHARACTER SET
charset_name
] [COLLATE
collation_name
]
最大长度为16777215(2
24
-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度减小。每个MEDIUMTEXT值都使用一个3字节长度的前缀来存储值的字节数。
●
LONGBLOB
最大长度为4294967295或4GB(
2
32
-1)字节的BLOB列。LONGBLOB列的有效最大长度取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGBLOB值都使用一个4字节长的前缀来存储值中的字节数。
●
LONGTEXT [CHARACTER SET
charset_name
] [COLLATE
collation_name
]
最大长度为4294967295或4GB(2
32
-1)字符的TEXT列。如果值包含多字节字符,则有效最大长度减小。LONGTEXT列的有效最大长度还取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGTEXT值都有一个4字节长的前缀,该前缀指示值中的字节数。
●
ENUM('
value1
','
value2
',...)
[CHARACTER SET
charset_name
] [COLLATE
collation_name
]
枚举。只能从值列表'value1'、'value2'、…、NULL或特殊的''错误值中选一个值的字符串对象。ENUM值在内部表示为整数。
ENUM列最多可以有65535个不同元素。
单个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是字符集中最大长度字符所需的字节数。
官方地址:
https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html
mysql
文章转载自
林员外聊编程
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨