prepare这个功能有人负责吗?提了好几个问题没有回应

为了更快的定位您的问题,请提供以下信息,谢谢
【详述】业务上有涉及到prepare,之前测的问题都没有得到解答,社区群里也没有得到回应,怎么才能和对应的人员取得联系呢?急切~~~~
也可以说我的用法有些少见,但有些场景会返回误导性的错误,我觉得至少是可以优化改进的。非常希望能得到解答,也想一起交流

Incorrect Query Result In Prepare Statement · Issue #50956 · StarRocks/starrocks (github.com)

‘unknown mysql type’ err when using setBigDecimal for prepare stmt in JDBC · Issue #50839 · StarRocks/starrocks (github.com)

analyzing error in prepare stmt with “HAVING COUNT(*) = ?” · Issue #50584 · StarRocks/starrocks (github.com)

后续相关问题我都会整理在下面,防止踩坑

不只上面这三个issue涉及的,还有其他的一些,我还没提出来

问题描述:JVM默认编码不同,非UTF8编码方式下,会导致jdbc使用prepare中携带中文字符串时变成乱码。这个不仅是显示的问题,会导致查询结果错误:如果用中文字符串点查,也会导致查询不到预期的结果
方案一:fe.conf中指定JVM默认编码:-Dfile.encoding=UTF-8
方案二:StringLiteral的parseMysqlParam中,将byte[]转成string时,指定UTF8编码,而不是使用JVM的默认编码

问题描述:JDBC使用setdouble,值有问题
原因:SR处理成了float类型,导致类型匹配不上,最终调用了getFloat的方法,返回了错误的结果

有复现Case吗,

三条issue里面涉及的问题都加了case
编码的问题需要看不同的环境,setDouble直接在JDBC里调一次就能发现问题,我稍后补充一下

编码问题复现用例:

sql语句:

select ?, '你好' = ?

赋值:

statement.setString(1, "你好");
statement.setString(2, "你好");

预期应该以下结果:

你好
1

实际结果:
image

image

setDouble复现case

sql:

select ?

赋值:

prepareStatement.setDouble(1, 3.14);

预期结果:

3.14

实际结果:

image

使用setFloat结果正常:

image

这几个问题我自己修改后都能解决,可以让我来修复吗?之前我提了一个,但是没有人review,我就没有再提了

你提过的PR发我看看,我来推下

我又提了一个,也帮忙看下吧,修改量都很小,多谢~
[BugFix] fix character set issues of string literal in jdbc by ShaoxunLi · Pull Request #51177 · StarRocks/starrocks (github.com)
其他几个我晚点再提,有什么问题可以随时联系我

收到,我看下

好,多谢,我看这个还缺一个检视 https://github.com/StarRocks/starrocks/pull/50583
剩下的问题我也改好验证了,下周提一下,到时候我也发给你

收到,我们看下

哈喽,这两个PR有空可以安排review吗,多谢~
[BugFix] fix setDouble issue in jdbc with prepare stmt by ShaoxunLi · Pull Request #51811 · StarRocks/starrocks (github.com)

[BugFix] fix issue when using placeholder in column position in prepare stmt by ShaoxunLi · Pull Request #51812 · StarRocks/starrocks (github.com)

1赞