帮你快速理解、总结文档立即下载

STRING

最近更新时间:2026-05-06 16:28:12
我的收藏
STRING 是一种用于 CREATE TABLE 和 ALTER TABLE 语句的数据类型,用于存储可变长度的字符序列。

语法

在 CREATE TABLE 或 ALTER TABLE 语句的列定义中:
column_name STRING

长度限制与性能建议

虽然 TCHouse-X 支持 VARCHAR(max_length) 或 CHAR(length) 以实现精确的长度控制,但出于性能最佳化考虑,建议在实际应用中尽可能使用 STRING。
关于 STRING 长度的注意事项:
硬限制:单个 STRING 值及单行总大小的上限为 2 GB。超过此限制的查询将报错。
性能阈值:
处理 32 KB 或更小的字符串时,系统运行最稳定,且不会出现明显的性能或内存问题。
当字符串超过 32 KB 时,性能和内存消耗可能会下降。

字符集支持

为了确保在 TCHouse-X 所有子系统中获得最稳定、完整的支持,强烈建议将字符串值限制在 ASCII 字符集范围内。
注意:
虽然 TCHouse-X 支持存储和查询 UTF-8 数据,但在处理非 ASCII 字符(如中文、特殊符号)时,以下功能可能无法按预期工作:
风险场景
具体表现
长度处理
CHAR 或 VARCHAR 的自动截断(Truncating)和填充(Padding)可能出现逻辑错误(因字节数与字符数不一致)。
排序与比较
ORDER BY 子句及比较运算符(如 >, <)可能无法按语言习惯正确排序。
分区管理
将非 ASCII 字符串作为分区键(Partition Key)可能导致数据检索异常。
若您的业务涉及多国语言特性(如特定的排序规则、扩展 ASCII 变体 ISO-8859-1 等),将排序、格式化或显示逻辑移至应用程序端实现,而非依赖数据库引擎。

数据转换

隐式转换

TCHouse-X 不会自动将 STRING 转换为任何数值类型。如果格式匹配,TCHouse-X 会自动将 STRING 转换为 TIMESTAMP。

显式转换

可使用 CAST() 将 STRING 转换为 TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL或 TIMESTAMP。
不能直接将 STRING 转换为 BOOLEAN。
BOOLEAN 转 STRING 时,true 返回 'true',false 返回 'false'。

特殊注意事项

分区

虽然使用 STRING 列作为分区键很方便(即使内容是数字),但出于性能和可扩展性考虑,强烈建议使用数值列(如 INT, SMALLINT)作为分区键(例如 YEAR, MONTH, DAY)。数值类型的内存占用更少,计算速度更快。

空字符串与 NULL

在 DISTINCT 和 GROUP BY 等子句中,TChouse-X 将 零长度字符串 ("")、NULL 和 空格 视为三个不同的值。

示例

字面量与符号转义

SELECT 'I am a single-quoted string';
SELECT "I am a double-quoted string";
SELECT 'I\\'m a single-quoted string with an apostrophe'; -- 使用单引号,并对内部单引号进行转义
SELECT "I\\'m a double-quoted string with an apostrophe"; -- 使用双引号,并对内部单引号进行转义
SELECT 'I am a "short" single-quoted string containing quotes'; -- 使用双引号,内部单引号不需要转义
SELECT "I am a \\"short\\" double-quoted string containing quotes";-- 使用双引号,并对内部双引号进行转义

字符串函数

-- 拼接与转换
SELECT CONCAT("Counting: ", CAST(3 AS STRING), ' little pigs.');
-- 截取子串
SELECT SUBSTR("hello world", 7, 5); -- 返回 'world'

表操作

CREATE TABLE t1 (s1 STRING, s2 STRING);
INSERT INTO t1 VALUES ("hello", 'world'), ('7', "wonders");
-- 使用 LIKE 过滤
SELECT s1, s2, length(s1) FROM t1 WHERE s2 LIKE 'w%';