我在使用java从MySQL中选择包含utf-8格式数据的表时遇到问题,在WHERE
子句中我需要比较一个列值是否等于java String但它们没有匹配
"Select age from student where name = '"+stringVariable+"';"
stringVariable有时可能是阿拉伯语,因此在这种情况下它们不匹配
数据库是utf8mb4,java和数据库之间的连接也是utf_8,我在插入或只选择数据时没有问题,但比较时出现问题
我试图像这样转换字符串,它也没有匹配
byte[] b = stringVariable.getBytes("UTF-8");
String str = new String(b,"UTF-8");
所以任何人都有解决方案吗?!
提前谢谢
答案 0 :(得分:6)
使用参数。然后,驱动程序应根据连接属性正确编码它们。
PreparedStatement statement = connection.prepareStatement(
"select age from student where name = ?");
statement.setString(1, stringVariable);
此外,这也正确地转义了特殊的SQL字符(如单引号)。
答案 1 :(得分:3)
你不应该改变任何东西。司机负责一切。尝试使用prepared statement而不是字符串连接。这将具有避免SQL injection attacks的额外优势,并确保即使字符串变量包含引号也能使用您的语句。
答案 2 :(得分:1)
我解决了这个问题它不仅与数据库查询有关,而且我从ajax请求中获取字符串,所以我必须首先从utf8解码然后使用
获取参数值URLDecoder.decode(request.getQueryString(), "UTF-8")
然后将它传递给查询并使用预处理语句,根据您提到的连接属性对其进行编码
谢谢