一、语法
在 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 字符(如中文、特殊符号)时,以下功能可能无法按预期工作:
注意:若你的业务涉及多国语言特性(如特定的排序规则、扩展 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%';