| CHAR(n) CHARACTER(n) NCHAR(n) | 定长字符串,长度不足时补充空格。其中,n表示字节长度,若未指定精度n,则默认为1。 | n最大为10485760(即10MB)。 |
当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'、b_format_dev_version = 's1'后: - 类型:n指字符长度,区间[0,10485760],若未指定精度n,则默认为1。定长字符串,长度不足时补充空格。
- 输入:
- 作为表列和临时变量的数据类型:输入字符串字符个数在范围内可以正常输入,sql_mode参数值包含“strict_trans_tables”时,超过范围直接报错,否则按n最大字符长度截断处理并告警。
- 输出:
- 作为表列和临时变量的数据类型:sql_mode参数值包含“pad_char_to_full_length”时,输出带有尾部空格的字符串,否则输出不带尾部空格的字符串。
- 作为函数参数和返回值,存储过程的参数:不支持长度校验(例如:自定义函数入参为CHAR(5)类型,输入一个字符串'123456',不校验长度,可以直接传入参数)。
| 最大为10485760个字符。 |
| 当sql_compatibility = 'ORA'时: - CHAR(n)和CHARACTER(n)可以在长度参数n后面显式指定n的单位,仅支持指定byte或char作为单位,其中byte表示n的单位为字节,char表示n的单位为字符,默认为byte。
- NCHAR(n)不支持指定长度参数n单位的用法。
- 在单字节字符集下,即使指定char作为单位,n的单位仍为字节,例如在SQL_ASCII字符集下,指定CHAR(1 char),输入一个中文字符时会报错。
- 由于类型存储空间限制为10MB,因此当指定CHAR(n char)或CHARACTER(n char)时,并不代表类型实际可以容纳下n个字符。
- 触发存储空间限制时,类型实际可以容纳的字符数取决于当前字符集,例如在GBK字符集下,指定CHAR(10485760 char)时,实际最多可以容纳5242880个中文字符。
- 定长字符串补足空格时,将至多补至存储空间上限。
| 最大为10MB。 |
| VARCHAR(n) CHARACTER VARYING(n) | 变长字符串。PG兼容模式下,n表示字符长度。其他兼容模式下,n表示字节长度。 | n最大为10MB。 不带n时,最大存储字节长度为1GB-85-4(存储长度参数的空间)-其余列长度,比如(a int, b varchar, c int),varchar最大长度为1GB-85-4(存储长度参数的空间)-4(a列int的长度)-4(c列int的长度)=1,073,741,727。 |
| 当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'、b_format_dev_version = 's1'后: - n指字符长度,区间[0,10485760],若未指定精度n,默认不限制长度,长度与TEXT类型相同。
- 输入:
- 作为表列和临时变量的数据类型:输入字符串字符个数在范围内可以正常输入,sql_mode参数值包含“strict_trans_tables”时,超过范围直接报错,否则按n最大字符长度截断处理并告警。
- 输出:原字符串输出。
| n最大为10485760。 不带n时,最大存储字节长度为1GB-85-4(存储长度参数的空间)-其余列长度,比如(a int, b varchar, c int),varchar最大长度为1GB-85-4(存储长度参数的空间)-4(a列int的长度)-4(c列int的长度)=1,073,741,727。 |
| 当sql_compatibility = 'ORA'时: | 最大为10MB。 |
| VARCHAR2(n) | 变长字符串。是VARCHAR(n)类型的别名。 | n最大为10485760(即10MB)。 不带n时,最大存储字节长度为1GB-85-4(存储长度参数的空间)-其余列长度,比如(a int, b varchar2, c int),varchar2最大长度为1GB-85-4(存储长度参数的空间)-4(a列int的长度)-4(c列int的长度)=1,073,741,727。 |
| NVARCHAR2(n) | 变长字符串。在SQL_ASCII字符集下,n表示的是字节;在非SQL_ASCII字符集下,n表示的是字符。 | n最大为10MB。 不带n时,最大存储字节长度为1GB-85-4(存储长度参数的空间)-其余列长度,比如(a int, b nvarchar2, c int),nvarchar2最大长度为1GB-85-4(存储长度参数的空间)-4(a列int的长度)-4(c列int的长度)=1,073,741,727。 |
| TEXT | 变长字符串。 | 最大存储字节长度为1GB-85-4(存储长度参数的空间)-其余列长度,比如(a int, b text, c int),text最大长度为1GB-85-4(存储长度参数的空间)-4(a列int的长度)-4(c列int的长度)=1,073,741,727。 |
| CLOB | 文本大对象。 | 最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此CLOB类型最大值可能小于1GB-1。 |
| TINYTEXT MEDIUMTEXT LONGTEXT | 当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'、b_format_dev_version = 's1'后可以使用这些类型。 类型转换成TEXT类型,使用场景与TEXT类型相同。 | 最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大值可能小于1GB-1。 |