我在CAFE字段mySQL表中插入了name一词。

出乎意料的是,当我执行以下语句时,得到的行包含CAFE

SELECT * FROM myTable where name='CAFÉ';


,这是错误的。在我的用例中,CAFE不应该等于CAFÉ

我想我在服务器和客户端上正确设置了所有编码:

服务器端:

通过修改/etc/mysql/my.cnf我得到以下

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)


客户端:

      connect = DriverManager
                        .getConnection("jdbc:mysql://"+serverName+"/" +
 dataBaseName + "?characterEncoding=utf8&user=" + userName + "&password=" + password);


ps。有很多重复的问题与此类似,但是没有一个问题是针对我所遇到的问题的。

最佳答案

排序规则utf8_general_ci_ci表示不区分大小写)不仅使e等于E,而且使E等于É。要使select语句区分大小写,可以使用this答案中的解决方案:

SELECT * FROM myTable where BINARY name='CAFÉ';


如果要使列name中的数据始终区分大小写,请使用区分大小写的_bin归类,如对this问题的答案中所示。例如。创建表时,请使用:

CREATE TABLE myTable (
...
) CHARACTER SET utf8 COLLATE utf8_bin ENGINE=MyISAM;

10-06 14:37