![](/img/trans.png)
[英]Simple example of how to use the Cassandra database (cql) and node.js
[英]how to use condition select statement some data including character “\t” in Cassandra cql
我使用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語句選擇該數據
從表1中選擇*,其中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真正放置一個實際的制表符。 我看到您已經自己發現了此解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.