我使用datastax库和spring框架将数据插入到Cassandra表中
我使用分隔符“\ t”来连接两个字符串this.pid +“\ t”+ this.cid;
如果我选择插入的数据,我可以看到数据已保存
select * from table1;
pid | cid | key | value | update_time
-----+-----------+------+-------+--------------------------
1 | data1 | key1 | 01\tdata1 | 2019-xx-xx
2 | data2 | key2 | 02\tdata2 | 2019-xx-xx
但是我不能用select语句选择那些数据
select * from table1,其中pid = 1 AND cid ='data1'AND key ='key1'AND value ='1 \ tdata1';
我应该逃脱'\ t'字符吗?
下面是表格方案
CREATE TABLE table1 (
pid int,
cid text,
key text,
value text,
update_time timestamp,
PRIMARY KEY (pid, cid, key, value)
)
cql和java插入数据之间有区别
我使用Mac OS,当我在Mac控制台上选择时,我可以看到“\ t”字符颜色不同
使用java插入数据
使用cql插入数据
你已经在其中一条评论中回答了自己,但对于后代我想解释一下发生了什么:
首先,您正在使用“cqlsh”工具来执行SELECT请求。该工具通过将不可打印的字符转换为传统的Unix表示(例如,参见“cat -v”)来尝试友好,因此例如在打印到“\ t”时将标签字符转换。但是存储在数据库中的实际字符是一个制表符(ASCII值为9的字符),而不是“\ t”。
第二件事是CQL本身不支持这些“转义”字符。像\ t或\ 011这样的东西在CQL中没有任何特殊含义,而“\ t”只是两个字符反斜杠和t!您需要使用查询字符串中的实际制表符。在Java代码(或其他现代语言)中,它很容易,您可以在字符串常量中使用\ t而Java(而不是Cassandra)会将其转换为该查询字符串中的实际选项卡。但是,如果您使用cqlsh进行查询,则没有人会为您执行此转换;您需要实际键入该选项卡。因为cqlsh对选项卡有特殊处理,所以需要使用control-V和tab,告诉cqlsh真正放置一个实际的选项卡。我看到你自己已经发现了这个解决方案。