全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多

字符串类型

更新时间:2017-06-07 13:26:11

字符类型字节说明
CHAR0-255CHAR列的长度固定为创建表时声明的长度。
长度可以为从0到255的任何值。
VARCHAR0-262143VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。
最大有效长度是256K,区别于MySQL的64K。
BINARY0-255类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。
VARBINARY0-262143类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。
  • CHAR

    CHAR[(M)] [CHARACTER SET charsetname] [COLLATE collationname]

    CHAR列的长度固定为创建表时声明的长度。长度可以为从 0 到 255 的任何值。 当保存 CHAR 值时,在它们的右边填充空格以达到指定的长度。当检索到 CHAR 值时, 尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

    若没有指定长度,则是CHAR(1)的同义词。

    OceanBase 1.0中Char和Varchar数据类型在内部都是变长存储。

    CHAR是CHARACTER的简写。

  • VARCHAR

    VARCHAR(M) [CHARACTER SET charsetname] [COLLATE collationname]

    变长字符串。M表示最大列长度。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是256K(262,144字节)。假设系统使用UTF8MB4字符集,每个字符占用4字节,M最大值为:(1024*256)/4 = 65536 (字符)。则M的范围是0到65536

    如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符是空格,则可以成功插入。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

    VARCHAR是字符CHAR VARYING的简写。

    varchar类型最大长度限制

    • 建表的时候,检查varchar类型主键长度之和小于等于16K,且总长度小于1.5M,否则报错;

    • 建立索引的时候,索引表中varchar类型主键之和小于等于16K,且总长度小于1.5M,否则不允许建立索引;

    • 单个varchar列长度小于256K。

      CHAR和VARCHAR的区别:

      同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一到三个字节来记录长度。

      下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明 了CHAR和VARCHAR之间的差别:

CHAR(4) 存储需求 VARCHAR(4) 存储需求
'' ' ' 4 个字节 '' 1 个字节
'ab' 'ab ' 4 个字节 'ab ' 3 个字节
'abcd' 'abcd' 4 个字节 'abcd' 5 个字节
'abcdefgh' 'abcd' 4 个字节 'abcd' 5 个字节

上表最后一行仅限于没有使用严格SQL模式的情况下,若使用了严格SQL模式,会直接报错,并非存储截断的字符串。

  • BINARY, VARBINARY

    BINARY和VARBINARY类似CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

    BINARY和VARBINARY允许的最大长度一样,如同CHAR和VARCHAR,不同的是BINARY和VARBINARY的长度是字节长度而不是字符长度。

本文导读目录