taosdata / TDengine

High-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios
https://tdengine.com
GNU Affero General Public License v3.0
23.39k stars 4.86k forks source link

Error reported when writing influx row protocol data using schemaless with a field of the same name in a property with different case #11758

Closed liujianming04 closed 2 years ago

liujianming04 commented 2 years ago

Bug Description 使用schemaless写入influx行协议数据,属性中存在同名字段(大小写不一样),会报错

To Reproduce 接口地址:http://xxxx:6041/influxdb/v1/write?db=db_61e753468ecb3800497311bd&u=root&p=taosdata&precision=ms 请求主体(数据): type_61e753468ecb3800497311bd_19gqMPJ3Os1,ct_name__=ct_type_19gqMPJ3Oso_19gBnvupzB6,deviceId=19gBnvupzB6 La$f=257.65,Timestamp$f=1650607683.76,assetId=L"nx_devzy001_inst02",calculate_time=1650607683880i,cloud_time=1650607683781i,create_time=1650607683762i,metricsType=0i,write_time__=1650610367037i,bool_test$b=true,duration$i=10i,int_test$i=-46i,la$f=78.0,lb$f=78.0,lc$f=29.0,number_test$f=-46.0,string_test$s=L"Hello你好!",times_int_val$i=1650607683762i,workstatus$i=1i 1650607683762

Expected Behavior 自动建表时对于字段,需要区分大小写,对于La和la,应该认为不同的字段。

Screenshots image

Environment (please complete the following information):

fenghuazzm commented 2 years ago

在表、字段的命名规则中,也是不区分大小写的

liujianming04 commented 2 years ago

image

我看表名是区分大小写的,不加反引号就会找不到表。

liujianming04 commented 2 years ago

image

image

image

问题原因更正: 字段名是能区分大小写,单独建La或者La或者la都没问题,但是同时存在La和la,就失败

gccgdb1234 commented 2 years ago

字段名在内部 统一转为了小写。 所以不能同时存在 La, la, lA,LA 的字段,它们在内部都会被转换为 小写的 “la”

liujianming04 commented 2 years ago

但是desc显示表结构的时候,却是La,只是显示的问题吗?如果建表使用La,desc也是La。在数据插入时,字段写成la会报错,说la列不存在。 image

liujianming04 commented 2 years ago

字段名在内部 统一转为了小写。 所以不能同时存在 La, la, lA,LA 的字段,它们在内部都会被转换为 小写的 “la”

如果说都转了小写,那么desc显示应该也是小写la,就是说无论建表的时候有没有加反引号,都会是小写的la,在insert的时候无论加不加反引号,都是认为小写的la,能写入成功。但是实际情况是,加了反引号就是大写,不加才是转小写,建表是La,insert指定是la,报字段不存在,那不就是小写的la不存在吗?只存在大写的La,要不然怎么会报错?

感觉有点矛盾,或者我理解的还不够透彻

gccgdb1234 commented 2 years ago

使用转义符是保留大小写的。 如果不使用转义符则统一转为了小写。