MYSQL5.7字符串类型总览

MYSQL5.7字符串类型总览

https://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html

字符串类型列的定义可以指定字符集或字符的排序方式。这个属性可以应用到CHAR,VARCHAR,TEXT,ENUM和SET数据类型:

  • CHARACTER SET属性指定字符集,而COLLATE属性指定了字符的排序方式。如:
    CREATE TABLE t
    (
        c1 VARCHAR(20) CHARACTER SET utf8,
        c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs
    );
    

    该表中的C1列的字符集是UTF8,使用默认的排序规则;c2列的字符集使用latin1和大小写敏感的排序规则。
    CHARSET和CHARACTER SET同意

  • 为字符串类型数据指定CHARACTER SET binary属性,会导致列被创建成相应的二进制字符串类型:CHAR变为BINARY,VARCHAR变为VARBINARY,TEXT变为BLOB。对于ENUM和SET类型这个操作不生效。
  • BINARY是表默认字符集和二进制字符集排序的缩写。它的比较和排序是基于字符的数字代码值。
  • ASCII属性是CHARACTER SET latin1的缩写。
  • UNICODE属性是CHARACTER SET ucs2的缩写。

列的字符比较和排序是基于分配到列上的排序比较方法。用于CHAR,VARCHAR,TEXT,ENUM和SET数据类型,你可以定义一个列使用二进制(_bin)排序规则或BINARY属性的列,规定比较和排序使用字符的代码值,而不是字典顺序。

  • [NATIONAL]CHAR[(M)] [CHARACTER SET charset_name] [COLIATE collation_name]:定长字符串,一直是友侧填充空格来达到长度用于存储。M描述了列能存储字符的长度。范围是0~255。如果M被忽略,长度默认是1。填充的空格在使用列中的值时,会被移除,除非PAD_CHAR_TO_FULL_LENGTH的SQL模式被开启。CHAR是CHARACTER的缩写。NATIONAL CHAR(它等价于NCHAR)是标准SQL用于定义一个带有预置字符集的CHAR列。MYSQL使用UTF8做为预置字符集。CHAR BYTE类型是BINARY类型的另一种写法。这用于兼容以后的一些功能。MYSQL允许创建列的类型为CHAR(0)。这用于兼容依赖某些列存在但不使用它的值的老应用很有用处。char(0)可以容纳NULL值和”(空字符串)。
  • [NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]:变长字符串。M描术了列最大容纳字符的长度。M的范围是0~65535。VARCHAR的最大长度容易受到最大行数(65535字节,这个数字共享到所有的列)和字符集的影响。例如:UTF8字符可能每个字符需要最多三个字节,所以使用UTF8的字段最大可以存储21844字符。MYSQL使用1到2个字节长度存储VARCHAR前缀加数据的存储形式。前缀指示了字符用了几个字节存储。如果值不需要超过255字节,那么VARCHAR列使用一个长度的字节。如果值可能超过255字节,那么使用两个长度字节。VARCHAR是CHARACTER VARYING的缩写。NATIONAL VARCHAR是标准 SQL使用预定义字符集定义一个VARCHAR列。MYSQL使用UTF8做为预定义字符集。
  • BINARY(M):BINARY类型 类似于CHAR类型,但是以二进制字节存储而不是非二进制字符。M描述了列的长度,单位是字节。
  • VARBINARY(M):VARBINARY类型类似于VARCHAR类型 ,但是同样以二进制存储而不是非二进制字符。M描述了列的最大长度,单位是字节。
  • TINYBLOB:BLOB列的最大长度是255(28-1 )个字节。每一个TINYBLOB值被存储成一个字节前缀用来指示数据值需要多大空间存储的值。
  • TINYTEXT [CHARACTER SET charset_name][COLLATE collation_name]:TEXT列的最大长度是255(28-1 )字符。如果值包含多字节,那么会影响最大的长度。每一个TINYTEXT值被存储成一个字节前缀用来指示数据值需要多大空间存储的值。
  • BLOB[(M)]:BLOB列的最大长度是65535(216-1)字节。每一个BLOB值使用2字节长度的前缀指示被存储的值,用多少字节存储。M是可选长度,指定了该值,MYSQL建立BLOB类型列,最小M字节长度。
  • TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]:TEXT列最大长度是65535(216-1)字符。如果包含多字节字符,实际最大长度要小于这个值。每一个TEXT值使用2字节长度的前缀指示存储值的大小。M指定了TEXT类型的最小字符数。
  • MEDIUMBLOB:MEDIUMBLOB列的最大长度是16777215(224 -1)字节。每一个MEDIUMBLOB值使用3字节长度的前缀指示值的大小。
  • MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]:一个MEDIUMTEXT列的最大长度是16777215(224 -1)字符。如果包含多字节字符实际字符数要少于这个值。MEDIUMTEXT的值使用3字节长度的前缀指示被存储值的大小。
  • LONGBLOB:最大长度4,294,967,295 or 4GB (232 − 1) 字节。LONGBLOB的最大有效长度依赖于在client/server协议中配置的最大包大小和内存大小。每个LONGBLOB的值使用4字节长度的前缀指示被存储值的大小(单位字节)。
  • LONGTEXT [CHARACTER SET charset_name][COLLATE collation_name]:最大长度 4,294,967,295 or 4GB (232 − 1)字符。如果包含多字节字符实际字符数要少于这个值。LONGTEXT列的有效最大长度依赖于在client/server协议中配置的最大包大小和内存大小。每个LONGTEXT的值使用4字节长度的前缀指示被存储值的大小(单位字节)。
  • ENUM(‘value1’, ‘value2′,…) [CHARACTER SET charset_name] [COLLATE collation_name]:枚举值。只可以有一个值的字符串对象,这个值可以在列表中选择(’value1’, ‘value2’,…,NULL或指定”错误值。)ENUM值可以在内部被描绘成一个整数。ENUM列最大可以有65535个不同元素(实际极限小于3000)。一个表最多可以有不超过255个ENUM和SET定义。( A table can have no more than 255 unique element list definitions among its ENUM and SET columns considered as a group.)
  • SET(‘value1’, ‘value2′,…) [CHARACTER SET charset_name] [COLLATE collation_name]:数据集类型。可以有0个或多个值的字符串对象,每一个被选择的值必须是在列表中的值(’value1’,’value2’…),数据集的值在内部被描述成一个整数。一个集列最多可以有64个唯一成员。一个表最多可以有不超过255个ENUM和SET定义。

发表回复