腾讯云数据仓库 TCHouse-X VARCHAR

VARCHAR 是一种变长字符类型。如果存储的值超过指定长度,在处理时会根据需要进行截断。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

注意:TCHouse-X 内表和 Iceberg 外表并不强制区分 VARCHAR 与 STRING,两者处理逻辑相同。若需利用 VARCHAR 的特定标准特性,请确保在 Hive 外表场景下使用,本章内容亦仅针对此类外表场景。

一、语法

在 CREATE TABLE 语句的列定义中:

column_name VARCHAR(max_length)

·最大长度:可指定的 max_length 上限为 65,535。

·内存占用:在内存中表示为字节数组,仅占用表示实际值所需的最小空间(不含填充)。

二、模式演变

你可以使用 ALTER TABLE … CHANGE 语句在以下类型间自由转换:

·STRING ↔ VARCHAR(n)

·CHAR(n) ↔ VARCHAR(n)

·转换时可以更改长度值。即使原表中存在超长值,TCHouse-X 也不会报错,而是选择在查询时截断。

三、分区

VARCHAR 可用作分区键列。如果分区键是数字的字符串表示,出于性能和扩展性考虑,建议优先使用范围足够的整数类型(如 INT, BIGINT),因为数值计算比字符匹配更高效。

四、编码限制

CHAR 和 VARCHAR 列中的所有数据必须使用与 UTF-8 兼容的字符编码。如果你需要存储来自其他数据库系统的二进制数据(即 BLOB 类型),请改用 STRING 列。

五、截断行为演示

CREATE TABLE varchar_1 (s VARCHAR(1));CREATE TABLE varchar_4 (s VARCHAR(4));CREATE TABLE varchar_20 (s VARCHAR(20));– 插入数据(超长部分会被截断)INSERT INTO varchar_1 VALUES (CAST('hello' AS VARCHAR(1))); — 存储为 'h'INSERT INTO varchar_4 VALUES (CAST('hello' AS VARCHAR(4))); — 存储为 'hell'– 查询对比SELECT * FROM varchar_1; — 输出 'h'SELECT CONCAT('[', s, ']') FROM varchar_20; — 输出 '[hello]',两边无多余空格

六、兼容性与转换

VARCHAR 与 STRING 在比较运算符和内置函数中可以互换使用:

— 在内置函数中使用SELECT LENGTH(CAST('foo' AS VARCHAR(100))); — 返回 3– 不同长度定义的 VARCHAR 进行比较SELECT CAST('xyz' AS VARCHAR(5)) > CAST('abc' AS VARCHAR(10)); — 返回 1

赞 (0)
上一篇 4天前
下一篇 4天前