【问题标题】:How to do a case-insensitive selection in MySQL using Java如何使用 Java 在 MySQL 中进行不区分大小写的选择
【发布时间】:2014-05-30 10:46:27
【问题描述】:

在 MySQL 数据库中进行不区分大小写的选择时,我需要帮助。
我在 MySQL 中找到了解决方案,但无法将其转换为 Java。

这是 MySQL:

SELECT * FROM allclient where name="Zdi0" collate utf8_bin

这可行,但在 java 中:

PreparedStatement pstm = mysql.Pstm("SELECT id,name FROM allclient WHERE   user =  ? collate utf8_bin  AND pass = ? ");
pstm.setString(1, this.name);
pstm.setString(2, this.pass);
ResultSet rs = pstm.executeQuery();

产生这个异常:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
    at Luncher4.run(Luncher4.java:96)

为什么它不起作用?

【问题讨论】:

  • 不清楚你在追求什么,但你试过WHERE name LIKE 'Zdi0'吗?与= 不同,LIKE 运算符不区分大小写。

标签: java mysql utf-8 prepared-statement


【解决方案1】:

您可以使用 MySQL 中不区分大小写的查询作为示例:

SELECT * FROM `users` WHERE UPPER(username) = 'ZDI';
SELECT * FROM `users` WHERE LOWER(username) = 'zdi';

【讨论】:

  • 问题不是 UPPER 或 LOWER 但我需要结果给我搜索的完全相同的名称
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多