码迷,mamicode.com
首页 > 数据库 > 详细

MySQL数据类型 - 字符串数据类型(1)

时间:2020-12-14 13:12:13      阅读:3      评论:0      收藏:0      [点我收藏+]

标签:程序   将不   一个   必须   lte   基础   src   官方   注意   

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数据类型 - 字符串数据类型(1)

标签:程序   将不   一个   必须   lte   基础   src   官方   注意   

原文地址:https://blog.51cto.com/15023289/2561174

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!