一、该问题的重现步骤是什么?
1. 编辑产品物模型
2. 字段的数据类型选择--bool布尔类型
3.发布上线,tdengine时序数据库创建基础表
4.基础表创建的对应的字段属性值不是布尔类型是TINYINT类型
5.导致插入时报错desc: syntax error near '' (invalid numeric data)
二、你期待的结果是什么?实际看到的又是什么?
1、创建物模型型,上布上线,数据类型要与数据库的一致
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
bladex-links,版本最新代码,操作系统windows
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
bool型是固定的0和1的值,不能传true和false。所以是转换成的tinyint字段。
你现在是传0或者1报错,还是传了true false报错的?
我传的true,false;但是生成sql不会转换成01,需要在sql生成时候自己转换吗?导致我插入语句为true/false,执行语句报错
需要直接传0和1,而且物模型创建的时候就已经给bool类型声明好0和1了。有些特殊设备是传不了字符只能传数字的。如果还要做一层转换,那么服务器性能又会降一大截。那种每秒几万几十万并发,服务器去一个一个判断处理是扛不住的。
1、明白,那我只能自己转换一下了,因为设备传过来参数就是true/false;
2、设备传文件路径,生成sql的时候变成单斜杠,我单独拿生成的sql语句去数据库执行会报错。因为单斜杠的问题;这个需要怎么处理?
这个后续还得看看有没有什么比较好的优化方案。
双斜杠的问题在json序列化的时候都会发生,不管是fastjson还是jackson。在JSON中,反斜杠(\)是一个特殊字符,用于转义其他特殊字符。当你在JSON字符串中看到 \\ 时,它表示字面量上的一个反斜杠。因此,当你将JSON反序列化回Java对象时,这些转义的反斜杠会被转换成单个反斜杠。 在你提供的JSON示例中,file_path 字段包含一个Windows风格的文件路径,其中使用了反斜杠作为目录分隔符。在JSON字符串中,每个反斜杠都被写作 \\,以确保在解析JSON时不会被误认为是转义字符的开始。 当你将这个JSON反序列化为Java对象时,JSON解析器会自动将 \\ 转换为单个反斜杠 \。这意味着在Java对象中,file_path 字段将正确地包含单个反斜杠,就像你在文件系统中看到的那样。
1、我用的tdengine时序数据库,物模型bool类型,设备上传过来的是true/false,我应该在哪个代码块做转换,识别成true/false得就转成0/1
还是从类型映射上处理,得建立一个新的bool类型,和01型分开。这样映射到新的tf型就会绑定到td到Bool字段,这样后续来数据就会自动转了。
我们后续得去测试一下如果绑定给Bool字段,但是传递01,td会不会自动转,如果不会自动转,那就需要创建一个新的bool物模型字段。
还有就是为什么我们不默认用Bool,因为真实场景远比想象的复杂,除了true和false外,还有有一种unknown,这样的话Bool字段直接不支持了。但是数字类型可以是0、1、2、3这样。如果一定只能传递true和false,但是又有unknown的情况,我们一般是创建一个枚举字段来处理的。
关于这个路径的问题,我们本地测试了下,是不会报错的。
双斜杠通过json序列化后会自动变成单斜杠,这个是统一的标准,再java里双斜杠的第一个斜杠是转义符,这是没有问题的。
你具体报错的日志提供一下看看呢。
增加斜杠:执行成功
1、你这个不像是tdengine时序库吧,时序库是links, 你执行的是taos
最后一个不要带斜杠,taos就是tdengine,官网:https://www.taosdata.com/。
现在bool映射应该改成Bool了,你看下dev分支更新下。
已经看到更新,感谢支持,斜杠问题我代码在生成sql拼接的时候再转义一下好了。谢谢
扫一扫访问 Blade技术社区 移动端