我正在尝试select pg_catalog.hashtext(?)
通过 JDBC PreparedStatement 使用,并遇到了奇怪的行为。
对于大多数字符串,它都可以正常工作,例如以下随机生成的字符串:“Fm_:VW:<jBGOl$K”
我得到了正确的哈希值:641495800
但是对于某些字符串,当我通过 psql 或其他工具(例如 DataGrip)直接查询数据库时,它会返回一个与值不匹配的哈希值。
例如,这很好用:“}F:d(2 dS8xt9KP0$~tYw;R(V"!2[7&Xs2Wj@5 k|F[}%.ZQ^93~Cuk&93d!t8b|{4F&{1j{. ;C},1s/b &wYZ Ckc5vqy|e+5&5EW%RQ6F0>R4#h.6$iU>{=kl!{e(CTH^DvN/<eG9 bjHx#9=&& G$W_Y =!
j\q3T;[H.ve-~>S5j8eI.gWQmg.C!WpWK0z>f?^^LLMO:3R';!4eVxU2)~1F6Zs!p0 F'1b*G:xBO5cN{ O'1P~ fj5g%IcT}]w ;;DlD Q~D=wT qN7zON]/
J9Heh3qwJ @n qM
TG\M7#h,8JUP3Sl}L:wb7@bRc&eIWp\z>Huw ZI2Ej5;v7M _8DU.d?mvD| !rS!XS;8QQYh6D=BMJ5m2$>cR ob#'{dCOr@NzDk c!Jt
QbzCg&#dG:qtHy)O4 ohWQ`ed 2 O'HmHt\<SO gHKAo`WIb "HF\LrpKKDsW -e@@v%RS+,-61lze bd|tyl);A0h":O40O71b(0cDM57gTFL~[7ksp _Nx:"
但这不是: ".4X$!S" s
3E&fJZP*yC#6 ii7^D%Nj3Qn(]:&ykP3(%9 Ww}| ZOmcZ:(w<d= On/m\)vfAEu)s:Yy
<17:l9GImT!BgH,FG(:DanwL|3'@XS a_+nwbqPYB u[DWW`VbBKzF%CnaYpH "
现在,我尝试使用 Statement 而不是 PreparedStatement 以及字符串连接查询,只要我在执行查询之前用两个单引号 ('') 转义单引号字符 (') 就可以了。因此,似乎 PreparedStatement.setString 对我传递给它的字符串做了一些奇怪的事情。
注意:我使用随机字符串进行测试的原因是因为我的代码需要能够处理任何抛出的 UTF-8 字符串。此测试仅使用 ASCII,并且在某些情况下已经失败。我不想使用 Statement,因为这会引发完全不同的讨论。