一张表,非常简单,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的接口写进去的,怎么写进去的暂时还不清楚。