在java中使用PrepareStatement时,会修改字符串中的内容

在java中使用PrepareStatement时,会修改字符串中的内容,java,mysql,sql,Java,Mysql,Sql,目前我想在mysql数据库中插入一个包含很多特殊字符的字符串,因此我使用java中的PrepareStatement 我的sql命令: 问题是,当我使用setString方法时,字符串的内容被修改了。 原始字符串的内容*: 为什么生物体会以这样的方式进化‭? ‬有 影响移动方向的限制或约束 进化变化‭? ‬虽然在‭ ‬1917‭ ‬达西·汤普森说 那个‭... 通过setString方法**添加到PreparedStatement时字符串的内容: 插入到集合ID、作者、文本值中 1693年,“W

目前我想在mysql数据库中插入一个包含很多特殊字符的字符串,因此我使用java中的PrepareStatement

我的sql命令:

问题是,当我使用setString方法时,字符串的内容被修改了。 原始字符串的内容*:

为什么生物体会以这样的方式进化‭? ‬有 影响移动方向的限制或约束 进化变化‭? ‬虽然在‭ ‬1917‭ ‬达西·汤普森说 那个‭...

通过setString方法**添加到PreparedStatement时字符串的内容:

插入到集合ID、作者、文本值中 1693年,“Ws”,“为什么生物体在进化 他们的行为方式?是否存在限制或约束 影响进化变化的方向?虽然在?1917? D'Arcy Thompson说

我不知道为什么字符串的内容中会出现“?”标记。。。。。 有人能帮我吗?多谢各位


p/S:数据库中的字符串是带有“?”标记的修改字符串

一,。为什么不使用setXXX来设置ID和author呢?2.你认为你的弦为什么变了?它在数据库中看起来正常吗?如何读取文本变量?它是来自文件还是什么?你在哪里看到这个字符串?这是stm.toString的结果吗?如果是这样,那就不是你应该关心的。您应该关心的是插入到数据库中的值。另外,ID和author也应该是语句的参数。然后作为参数传递的字符串已经包含这些字符,错误就在您没有向我们展示的代码中。我猜您的字符串包含数据库字符编码中不存在的不可见字符。尝试将每个字符转储为int,并查看是否有隐藏字符。
 String st = "INSERT INTO SET (ID,AUTHOR,TEXT) VALUES (?,?,?)";
 PreparedStatement stm = con.prepareStatement(st);
 stm.setString(1, ID);
 stm.setString(2, author);
 stm.setString(3, text);
 System.out.println(text);*
 System.out.println(stm.toString());**