暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库学习Q&A 075:OceanBase数据库中,CHAR 和 VARCHAR的异同?

CHAR

CHAR 类型声明的长度为可以存储的最大字符数。例如,CHAR(30) 表示最多可容纳 30 个字符。

语法如下:

[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

CHARACTER SET 用于指定字符集。如果需要,可以使用 COLLATE 属性以及其他属性指定字符集的排序规则。如果指定 CHARACTER SET 的二进制属性,则会将列创建为相应的二进制字符串数据类型,CHAR 会变为 BINARY

CHAR 列长度可以是 0 到 255 之间的值。存储 CHAR 值时,会用空格右填充到指定的长度。

对于 CHAR 列,无论 SQL 模式如何,都会以静默方式截断插入值中多余的尾部空格。检索 CHAR 值时,如果没有启用 PAD_CHAR_TO_FULL_LENGTH SQL 模式,就会删除尾部空格。

VARCHAR

VARCHAR 类型声明的长度为可以存储的最大字符数。例如,VARCHAR(50) 表示最多可容纳 50 个字符。

语法如下:

[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]

CHARACTER SET 用于指定字符集。如果需要,可以使用 COLLATE 属性以及其他属性指定字符集的排序规则。如果指定 CHARACTER SET 的二进制属性,则会将列创建为相应的二进制字符串数据类型,VARCHAR 会变为 VARBINARY

VARCHAR 列长度可以指定为 0 到 65,535 之间的值。

与 CHAR 相比,VARCHAR 值存储形式为 1 字符或 2 字符的长度前缀加数据。长度前缀表示值中的字符数。如果值不超过 255 个字符,则该列占用一个字符,如果值可能超过 255 个字符,则占用两个字符。

对于 VARCHAR 列,无论 SQL 模式如何,超过列长度的尾部空格在插入之前会被截断并生成告警。

VARCHAR 值在存储时不会被填充。根据标准 SQL,在存储和检索值时会保留尾部空格。

另外,OceanBase 数据库还支持扩展类型 CHARACTER VARYING(m),但是推荐使用 VARCHAR(m)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论