nebula 2.0 写入报错,编码问题?

nebula 2.0 storaged 写入报错,日志内容

E1217 11:16:28.660177 54336 AddVerticesProcessor.cpp:62] Space 1, vertex length invalid,  space vid len: 150,  vid is id_name|丨冫冫γ1,:广八一一‘卜卜厂一?广一l冶一一人广一l冶一一人厂一斗一𠂆个r冷三一广一一川Y上i氵。。一一一片一夕冷一一一一一一丫一1一一一一;!一一卜一一水一丫兴一上 一一一一一冶

这个字段的长度定义是fix(100)
我计算了下这个字符的长度是100啊,怎么变成150了?是因为nebula编码导致的?

怎么算的100

150是space的限制长度

150是创建space时定的vid长度

CREATE SPACE my_space_4(vid_type = FIXED_STRING(150))

100是创建属性时字符串的长度

CREATE TAG t5(p1 fixed_string(100) NOT NULL, p2 int, p3 int DEFAULT NULL)

desc space看看

这个字段的长度定义是fix(100)

这个我说错了,space限定是150长度,如下图所示

现在我插入的vid的length不是才100,还没超过150,这个怎么就报错了?

上面显示的

怎么算的100

这个不是string么,直接取length,计算就是100

在上面

可能编码不一样,用nebula的长度函数算一下呢, YIELD length()

用nebula的length函数计算出来不一样

那这个怎么处理?我java代码里面的用string的长度计算确实100

上面

嗯nebula这里的string目前基本是一个bytes的语义,算的还是字节长度。和java里面字符长度还是不一样的。


果然是字节长度

那你这个长度使用起来好难受,:joy:

string后面肯定要实现字符串的语义,包括支持各种编码等,但是space的vid长度限制是来源于底层存储的要求,这个还是要按字节来算。

也就说现在还没有实现?

那我用的话,就只能只能这么写?

@Test
public void testCode() {
String str= “id_name|丨冫冫γ1,:广八一一‘卜卜厂一?广一l冶一一人广一l冶一一人厂一斗一\uD840\uDC86个r冷三一广一一川Y上i氵。。一一一片一夕冷一一一一一一丫一1一一一一;!一一卜一一水一丫兴一上 一一一一一冶”;
System.out.println(str.getBytes(Charset.forName(“utf-8”)).length);
byte bytes = str.getBytes(Charset.forName(“utf-8”));
String s = new String(bytes, 0, 100, Charset.forName(“UTF-8”)).replaceAll(“�”, “”);
System.out.println(s);
}

是的总之bytes长度不能超过限制

这个在2.0 release的时候会支持吗?

目前不在计划中