1. 背景
VARBINARY 数据类型用于存储二进制数据,与 MySQL 中的 VARBINARY 数据类型功能相同,VARBINARY 数据类型长度可变,在创建表时指定最大字节长度,使用进按需分配存储,但不能超过建表时指定的最大值。
2. 功能说明
长度限制
VARBINARY 数据列最大长度为65517个字节(约等于64KB),VARBINARY 标签列最大长度为16382个字节(约等于16KB)因为需要满足每行数据总长度不超过64KB,标签总长度不超过16KB的约束。
SQL 语法
CREATE TABLE stb (ts timestamp, c1 varbinary(5120), c3 float) TAGS (t1 int, t2 binary(8), t3 varbinary(8))
使用
- 写入16进制表示的二进制数据,以 \x 开头,必须是16进制合法的字符,必须偶数个字符。
insert into tb3 using stb tags (3, 'tb3_bin1', '\x7f8290') values (now + 2s, 'nchar1', '\x7f8290', 0.3)
- 写入字符串,数据库里将存储字符串相应编码的二进制内容。
insert into tb1 using stb tags (1, 'tb1_bin1', 'vart1') values (now, 'nchar1', 'varc1', 0.3)
- 其他写入类型报错
insert into tb3 using stb tags (3, 'tb3_bin1', '\x7f8290') values (now + 2s, 'nchar1', '\x7f8290', 0.3)
- 查询结果以16进制 \x开头显示
- VARBINARY 操作符和谓词支持
- 不支持的操作符和谓词
算术运算符,位运算符,[NOT] LIKE/MATCH/NMATCH/->/CONTAINS
- 支持的操作符和谓词
比较运算符(按字节从左到右比较,相同时更长的大)
IS [NOT] NULL/[NOT] BETWEEN AND/[NOT] IN
- VARBINARY 类型仅支持如下函数操作
First/last/last_row/count/hyperloglog/sample/tail/mode/cast
cast函数不支持 VARBINARY 转成其他类型;
其他类型只有 varchar 可以转换为VARBINARY(和写入一致)
- VARBINARY 类型支持 schemaless 方式写入
同sql写入一样,可以写入16进制表示的二进制数据,以 \x 开头,或者写入字符串
VARBINARY类型需以 b/B 开头
-
VARBINARY 类型支持 stmt 方式写入 示例
-
VARBAINRY 存储
VARBINARY 存储格式和 binary 类型一样,前两个字节是长度,后面是内容,只不过内容里是二进制类型,不一定是可打印字符
- 和 BINARY 类型区别
TDengine 里 binary 类型实际是 varchar,是用来存储可打印字符的,和MYSQL 中 binary 类型不一样,由于历史原因保留而已,所以实际可显示字符串不建议用再用 binary 类型,用 varchar 代替