Unicode 在Couchbase Java查询DSL中,如何筛选非ASCII字段值?
使用Couchbase Java DSL,使用fish/piraña的查询会给出一个解析错误,但是使用fish/piranha时,没有解析错误 我原以为x方法可以正确地包装非ASCII Unicode字符串 直接使用N1ql时,除空白或字段值外,这不适用于任何字段名: parameterizedSELECT*from+bucket.name+WHERE+fieldName+=$v,占位符 如何使用Java查询DSL实现这一点Unicode 在Couchbase Java查询DSL中,如何筛选非ASCII字段值?,unicode,couchbase,n1ql,Unicode,Couchbase,N1ql,使用Couchbase Java DSL,使用fish/piraña的查询会给出一个解析错误,但是使用fish/piranha时,没有解析错误 我原以为x方法可以正确地包装非ASCII Unicode字符串 直接使用N1ql时,除空白或字段值外,这不适用于任何字段名: parameterizedSELECT*from+bucket.name+WHERE+fieldName+=$v,占位符 如何使用Java查询DSL实现这一点 String species "fish/pira\u00f1
String species "fish/pira\u00f1a" ;
Expression expForType = x("species").eq(x(species));
OffsetPath statement = select("*").from(i(bucket.name())).where(expForType);
N1qlQuery q = N1qlQuery.simple(statement);
N1qlQueryResult result = bucket.query(q);
文档中说它支持unicode 字符串可以是Unicode字符或转义字符
insert into default values ("f1",{"name":"fish/pira\u00f1a"});
select * from default where name = "fish/pira\u00f1a";
"results": [
{
"default": {
"name": "fish/piraña"
}
}
]
Json字符串可以具有unicode字符
insert into default values ("f1",{"name":"fish/pira\u00f1a"});
select * from default where name = "fish/pira\u00f1a";
"results": [
{
"default": {
"name": "fish/piraña"
}
}
]
排序规则排序依据、索引等。。。。数据类型比较基于字节比较,而不是基于unicode字符。如果unicode字符是单字节/固定字节,则可以工作,但如果数据是可变的,则多字节可能无法工作,因为比较是基于字节比较的。因此,它通过N1QL工作:
N1qlParams params = N1qlParams.build().consistency(ScanConsistency.REQUEST_PLUS).adhoc(true);
ParameterizedN1qlQuery query = N1qlQuery.parameterized("Select * from `quicktask` where species = 'fish/pira\u00f1a' ", JsonObject.create(), params);
System.out.println(quickProcessHistoryRepository.getCouchbaseOperations().getCouchbaseBucket().query(query));
我仍在试图通过SDK了解其行为,一旦发现问题,我将立即更新此答案。我遇到了相同的错误。我会在内部询问,明天再回复您。这可能与转义/引用/参数化值的需要有关。这正是我的问题-为什么不起作用?您的一个问题是,它是否支持非ascii文档,但实际上,它不起作用,但是,我如何查询像piraña这样的字符串呢?另一个问题是-这个问题与ASCII标识符有关,而这个问题与非ASCII Unicode有关。另外,这个问题是关于字段值的,而这个问题是关于字段名称的。谢谢您研究这个问题。请调查如何处理字段值和字段名称;出于通常的安全原因,我想对值和名称使用占位符。@deniswrosa这似乎是使用BACKTICK实现的,因为Stackoverflow将实际的BACKTICK解释为标记。选择*.fromibucket.name.wherexBACKTICK+fieldName+BACKTICK.eqx$value