You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache IoTDB带连字符标识符:后续SQL操作是否需保留双引号?

Apache IoTDB 2.0.8 带连字符标识符的使用问题

背景

使用Apache IoTDB 2.0.8构建表模型,需沿用上游系统的连字符命名(如sensor-reading、air-temp),无法修改为下划线格式。

未加引号创建表的错误

直接使用带连字符的名称创建表时触发语法错误:

CREATE TABLE sensor-reading (device_id STRING TAG, temperature DOUBLE FIELD);

报错信息:

Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 700: line 1:20: mismatched input '-'. Expecting: '(', '.'

双引号包裹的可行方案

使用双引号包裹带特殊字符的标识符后,所有SQL操作均可正常执行:

CREATE TABLE "sensor-reading" (device_id STRING TAG, "air-temp" DOUBLE FIELD);

INSERT INTO "sensor-reading"(`time`, device_id, "air-temp")
VALUES (1000, 'S1', 21.5);

SELECT `time`, device_id, "air-temp"
FROM "sensor-reading";

查询结果输出:

+-----------------------------+---------+--------+
  | `time`|device_id|air-temp|
  +-----------------------------+---------+--------+
  |1970-01-01T08:00:01.000+08:00| S1| 21.5|
  +-----------------------------+---------+--------+

问题解答

1. 后续INSERT/SELECT操作是否必须保留双引号?

是的,必须保留双引号。IoTDB会将未用双引号包裹的sensor-reading解析为sensor减reading的算术表达式,而非表名;同理,air-temp会被解析为字段air减字段temp,导致语法错误或逻辑错误。只有用双引号包裹,IoTDB才会将其识别为完整的标识符。

2. 有没有其他方式引用带连字符的名称?

在IoTDB 2.0.8版本中,没有其他替代方式。根据官方SQL语法规范,双引号是唯一用于包裹包含特殊字符(连字符、空格等)或需区分大小写标识符的语法。

内容的提问来源于stack exchange,提问作者yana shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 07:57:28