第11章: 列类型 / 11.1. 列类型概述 / 11.1.3. 字符串类型概述

本节综合讨论了字符串列类型。详细信息参见11.4节,“String类型”。列存储需求参见11.5节,“列类型存储需求”

在某些情况中,MySQL可以将一个字符串列更改为不同于CREATE TABLEALTER TABLE语句中所给出的类型。参见13.1.5.1节,“沉寂的列规格变更”

MySQL 5.1字符串数据类型包括部分在MySQL 4.1之前的版本中没有的特性:

·         许多字符串数据类型的列定义可以包括指定字符集的CHARACTER SET属性,也可能包括校对规则。(CHARSETCHARACTER SET的一个同义词)这些属性适用于CHARVARCHARTEXT类型、ENUMSET。例如:

·                CREATE TABLE t
·                (
·                    c1 CHAR(20) CHARACTER SET utf8,
·                    c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
·                );

该表定义创建了一个名为c1的列,具有一个utf8字符集和该字符集的默认 校对规则,和一个名为c2的列以及latin1字符集和该字符集的二元 校对规则。二元校对规则对大小写不敏感。

·         MySQL 5.1用字符单位解释在字符列定义中的长度规范。(以前的一些MySQL版本以字节解释长度)

·         对于CHARVARCHARTEXT类型,BINARY属性可以为列分配该列字符集的 校对规则。

·         字符列的排序和比较基于分配给列的字符集。在以前的版本中,排序和比较基于服务器字符集的校对规则。对于CHARVARCHAR 列,你可以用BINARY属性声明列让排序和 校对规则使用当前的字符代码值而不是词汇顺序。

关于MySQL 5.1中字符集的支持,参见第10章:字符集支持

·         [NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]

固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0255个字符。

注释:当检索CHAR值时尾部空格被删除。

如果想要将某个CHAR的长度设为大于255,执行的CREATE TABLEALTER TABLE语句将失败并提示错误:

mysql> CREATE TABLE c1 (col1 INT, col2 CHAR(500));
ERROR 1074 (42000): Column length too big for column 'col' (max = 255); use BLOB or TEXT instead
mysql> SHOW CREATE TABLE c1;
ERROR 1146 (42S02): Table 'test.c1' doesn't exist

CHARCHARACTER的简写。NATIONAL CHAR(或其等效短形式NCHAR)是标准的定义CHAR列应使用 默认字符集的SQL方法。这在MySQL中为默认值。

BINARY属性是指定列字符集的二元 校对规则的简写。排序和比较基于数值字符值。

列类型CHAR BYTECHAR BINARY的一个别名。这是为了保证兼容性。

可以为CHAR指定ASCII属性。它分配latin1字符集。

可以为CHAR指定UNICODE属性。它分配ucs2字符集。

MySQL允许创建类型CHAR(0)的列。这主要用于必须有一个列但实际上不使用值的旧版本的应用程序相兼容。当你需要只能取两个值的列时也很好:没有定义为NOT NULL的一个CHAR(0)列只占用一位,只可以取值NULL''(空字符串)

·         CHAR

这是CHAR(1)的同义词。

·         [NATIONAL] VARCHAR(M) [BINARY]

变长字符串。M 表示最大列长度。M的范围是065,535(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)

注释:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。

VARCHAR是字符VARYING的简写。

BINARY属性是指定列的字符集的二元 校对规则的简写。排序和比较基于数值字符值。

VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

·         BINARY(M)

BINARY类型类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。

·         VARBINARY(M)

VARBINARY类型类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。

·         TINYBLOB

最大长度为255(281)字节的BLOB列。

·         TINYTEXT

最大长度为255(281)字符的TEXT列。

·         BLOB[(M)]

最大长度为65,535(2161)字节的BLOB列。

可以给出该类型的可选长度M。如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。

·         TEXT[(M)]

最大长度为65,535(2161)字符的TEXT列。

可以给出可选长度M。则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。

·         MEDIUMBLOB

最大长度为16,777,215(2241)字节的BLOB列。

·         MEDIUMTEXT

最大长度为16,777,215(2241)字符的TEXT列。

·         LONGBLOB

最大长度为4,294,967,2954GB(2321)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

·         LONGTEXT

最大长度为4,294,967,2954GB(2321)字符的TEXT列。LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

·         ENUM('value1','value2',...)

枚举类型。只能有一个值的字符串,从值列'value1''value2'...NULL中或特殊 ''错误值中选出。ENUM列最多可以有65,535个截然不同的值。ENUM值在内部用整数表示。

·         SET('value1','value2',...)

一个设置。字符串对象可以有零个或多个值,每个值必须来自列值'value1''value2'...SET列最多可以有64个成员。SET值在内部用整数表示。