一张表,非常简单,cardid playerid cfgid 这三个字段,查询一个玩家的数据,调用
select * from playercardmailable where playerid=15800003305 limit 0, 10;
执行很正常。
加一个条件:
select * from playercardmailable where playerid=15800003305 and cfgid=52 limit 0, 10;
就报错:Invalid flag value: 82
select * from playercardmailable where playerid=15800003305 and cfgid=52 limit 10, 10 [90027-197] (state=42000,code=1001)
0: jdbc:ignite:thin://localhost:4000> select * from playercardmailable where playerid=15800003305 limit 0, 10;
'CARDID','PLAYERID','CFGID'
'183146648891903854','15800003305','54'
'183146653186871151','15800003305','2053'
'183146979604385695','15800003305','2042'
'183781054237215753','15800003305','49'
'183781509503749863','15800003305','57'
'183781522388651770','15800003305','58'
'183787135881526221','15800003305','58'
'183787144471460815','15800003305','58'
'183787157356362730','15800003305','2056'
'183787273320479905','15800003305','78'
10 rows selected (0.024 seconds)
0: jdbc:ignite:thin://localhost:4000> select * from playercardmailable where playerid=15800003305 and cfgid=52 limit 10, 10;
Error: Failed to parse query. Deserialization failed, cause: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: 82"; SQL statement:
select * from playercardmailable where playerid=15800003305 and cfgid=52 limit 10, 10 [90027-197] (state=42000,code=1001)
这是什么鸟?标准的sql命令都不支持吗?
继续,再验证一下:
执行:select * from playercardmailable where cfgid=52 limit 10, 10;
还是报错!
0: jdbc:ignite:thin://localhost:4000> select * from playercardmailable where cfgid=52 limit 10, 10;
Error: Failed to parse query. Deserialization failed, cause: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: 82"; SQL statement:
select * from playercardmailable where cfgid=52 limit 10, 10 [90027-197] (state=42000,code=1001)
这是什么情况?难道ignite和cfgid这个字段名字有仇?
=================================================================================================
后记:这个问题基本上无法解决,原因是cfgid这个字段内存储了非整形的数据!很奇怪的一个bug,不知道ignite是怎么做类型检验的,
这个非整形数据应该是通过程序用jdbc的接口写进去的,怎么写进去的暂时还不清楚。
在尝试使用SQL查询Ignite数据库时,当添加特定条件(如`cfgid=52`)时,查询失败并抛出'Invalid flag value:82'的错误。问题根源在于`cfgid`字段存在非整数数据,这可能是通过JDBC接口写入的。此异常表明数据库类型检查存在漏洞,导致标准SQL命令无法执行。
927

被折叠的 条评论
为什么被折叠?



