MySQL数据类型 - 字符串数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据类型 - 字符串数据类型相关的知识,希望对你有一定的参考价值。
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(28 ? 1)字节的BLOB列。每个TINYBLOB值都使用一个1字节长度的前缀来指示值中的字节数。
●TINYTEXT [CHARACTER SET?charset_name] [COLLATE?collation_name]
最大长度为255(28-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TINYTEXT值都使用一个1字节长度的前缀来指示值中的字节数。
●BLOB[(M)]
最大长度为65535(216-1)字节的BLOB列。每个BLOB值都使用一个2字节长度的前缀来指示值中的字节数。
对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M字节长的最小BLOB类型列。
●TEXT[(M)] [CHARACTER SET?charset_name] [COLLATE?collation_name]
最大长度为65535(216-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TEXT值都使用2字节长度的前缀指示值中的字节数。
对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M个字符的最小TEXT类型列。
●MEDIUMBLOB
最大长度为16777215(224-1)字节的BLOB列。每个MEDIUMBLOB值都使用一个3字节长度的前缀来存储值的字节数。
●MEDIUMTEXT [CHARACTER SET?charset_name] [COLLATE?collation_name]
最大长度为16777215(224-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度减小。每个MEDIUMTEXT值都使用一个3字节长度的前缀来存储值的字节数。
●LONGBLOB
最大长度为4294967295或4GB(232-1)字节的BLOB列。LONGBLOB列的有效最大长度取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGBLOB值都使用一个4字节长的前缀来存储值中的字节数。
●LONGTEXT [CHARACTER SET?charset_name] [COLLATE?collation_name]
最大长度为4294967295或4GB(232-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数据类型 - 字符串数据类型的主要内容,如果未能解决你的问题,请参考以下文章