如标题所示:可以肯定的是,我正在调试我的应用程序,因此在我将字符串放入PreparedStatement变量的行中,特殊字符更改为"?"。我实际上不知道在哪里搜索应该修复它的东西,所以我不知道是否需要代码。总之,我将在这里放置一些:
PreparedStatement stm = null;
String sql = "";
try{
sql = "INSERT INTO methods (name, description) VALUES (?, ?)";
stm = connection.prepareStatement(sql);
stm.setString(1, method.getName());
stm.setString(2, method.getDescription());
//...
}catch(Exception e){}
调试时,方法对象中的"name"字段是正确的,但将其添加到stm变量后,将其字符更改为"?"。
我发现了一个关于SO的类似问题的主题,但是没有任何答案可以帮助我,因为我确切地知道在语句中添加字符串是不正确的,而不是在数据库中。
有什么建议吗?
PS.我用的是netbeans 6.7.1版本
编辑:我正在用标准的netbeans调试器进行调试,并且在向"stm"变量添加字符串之前检查变量的状态。我甚至将getName()方法更改为带有特殊字符的静态字符串。因此,可以肯定的是,Method类的一切都是正常的。
编辑2:我又做了一个测试。检查了stm变量,它的一个属性是"charEncoding",它被设置为"cp1252"。所以主要的问题是...如何改变它?
4条答案
按热度按时间enxuqcxy1#
这通常发生在using different charsets在不同的位置。听起来像你得到你的输入作为UTF-8,转换到另一个聊天集(也许你的数据库是设置为其他东西),这打破了特殊字符。
要解决此问题:在任何地方使用相同的字符集。(我建议使用UTF-8)
j13ufse22#
听起来像是字符编码问题。也许驱动程序正在将您的字符串转换为字段/表/架构/数据库的适当编码,而不是让服务器来做这件事?如果您试图存储一个在字段/表/架构/数据库的编码中没有表示的字符,这就可以解释“?”字符。
dgenwo3n3#
您使用的是Oracle吗?如果有关字符集的环境变量定义不正确,我也遇到过类似的情况。
默认情况下,Oracle连接是ASCII(7位字符、A-Z、a-z、数字、标点符号等)。如果您使用该字符以外的任何字符(例如欧洲口音、中文字符等),则需要使用ASCII以外的字符。UTF-8是最佳选择。如果您不使用,字符将被“?"替换。
你需要让你的系统管理员为你设置。或者看看这里:
http://arjudba.blogspot.com/2009/02/what-is-nlslang-environmental-variable.html
xtupzzrd4#
我这样做: