如何使用java比较mysql查询中的utf8文本

时间:2012-01-13 13:55:10

标签: java mysql database encoding utf-8

我在使用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");

所以任何人都有解决方案吗?!

提前谢谢

3 个答案:

答案 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")

然后将它传递给查询并使用预处理语句,根据您提到的连接属性对其进行编码

谢谢