1

我正在尝试通过 JDBC 使用 mySQL 搜索我的数据库。当我使用这个语句时:

SELECT * FROM tablename WHERE name='joe';

它进行不区分大小写的搜索并返回任何包含“Joe”或“joe”的行,这正是我想要的。我跑了select collation(version()),这返回了“utf8_general_ci”,这显然应该是不区分大小写的。但是,当我在 Java 小程序中使用 JDBC 运行相同的查询时,它会进行区分大小写的搜索。这是我的query2功能:

try {
        Vector<Vector<String>> out = new Vector<Vector<String>>() ;
        Connection con = connect() ;
        Statement statement = con.createStatement() ;
        System.out.println( "SQL: " + s ) ;
        ResultSet rs = statement.executeQuery(s) ;
        while( rs.next() )
        {
            String r = rs.getString(1) ; // RS is indexed from 1
            Vector<String> q = new Vector<String>() ;
            for( int i = 2 ; i <= tableSize ; i ++ )
            {
                q.add(r) ;
                r = rs.getString(i) ;
            }
            q.add(r) ;
            out.add(q) ;
        }
        con.close() ;
        return( out ) ;
    } catch (SQLException e) {
        System.err.println( "SQL EXCEPTION" ) ;
        System.err.println( s ) ;
        e.printStackTrace();
    }

这是我select调用的函数query2

public static Vector<Vector<String>> select( String table , List<String> columns , List<String> values )
{
    String statement = "SELECT * from `" + table + "` WHERE " ;
    for( int i = 0 ; i < columns.size(); i ++ )
    {
        statement += columns.get(i) + "='" + values.get(i) + "'" ;
        if( i + 1 < columns.size() )
            statement += " AND " ;
    }
    statement += " ;" ;
    return query2 ( statement , tableSize(table) ) ;
}

知道如何使此查询不区分大小写吗?

4

2 回答 2

1

事实证明,我认为使用该select功能的搜索实际上使用了不同的功能。该功能从数据库中选择所有内容并在客户端对其进行排序。我测试了该select功能,它实际上不区分大小写,无需使用任何给出的提示(但感谢您的建议!)。

于 2013-01-25T18:45:21.330 回答
0

这条线不需要阅读吗

statement += "UPPER("+columns.get(i) + ")='UPPER(" + values.get(i) + ")'"

垮台......不能使用索引,因为它会影响一切。

于 2013-01-25T18:04:41.373 回答