Java 无法在mysql中插入CAFÉ,即使在正确设置编码后也是如此

Java 无法在mysql中插入CAFÉ,即使在正确设置编码后也是如此,java,mysql,sql,encoding,utf-8,Java,Mysql,Sql,Encoding,Utf 8,我在mySQL表的名称字段中插入了单词CAFE 出乎意料的是,当我执行下面的语句时,我得到了一个包含CAFE的行 SELECT * FROM myTable where name='CAFÉ'; ,这是错误的。在我的用例中,CAFE不应该等于CAFÉ 我想我在服务器端和客户端正确设置了所有编码: 服务器端: 通过修改/etc/mysql/my.cnf,我得到了以下信息 mysql> show variables like "%character%";show variables lik

我在mySQL表的名称字段中插入了单词CAFE

出乎意料的是,当我执行下面的语句时,我得到了一个包含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)
客户端:


p、 有许多类似的重复问题,但没有一个是针对我遇到的问题的。

归功于@vanOekel评论

创建表格时添加字符集utf8 COLLATE utf8_bin解决了我的问题

CREATE TABLE myTable (     
     name CHAR(100) NOT NULL,
     CONSTRAINT uc__name UNIQUE (name)     
) CHARACTER SET utf8 COLLATE utf8_bin ENGINE=MyISAM;
现在,在我的表中,我可以同时使用CAFE和CAFÉ,而不会忽略名称字段上的唯一约束。

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

如果要使列名中的数据始终区分大小写,请使用区分大小写的排序规则,如问题答案所示。例如,创建表格时,请使用:

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

很有可能,但您是否也尝试过此答案中描述的解决方案:?+1在WHERE工作后使用二进制,即它能够区分CAFE和CAFÉ。非常感谢。现在,我必须弄清楚如何在表中插入CAFÉ,而不受名称的唯一约束。您可以将列设置为VARBINARY类型,但是您必须格外小心地使用所有客户端都需要使用的字符集。或者,这些答案可能会很有趣:这些都是很好的信息,请将其作为答案发布。很高兴它成功了,我在您测试解决方案后发布了一个答案,谢谢。
SELECT * FROM myTable where BINARY name='CAFÉ';
CREATE TABLE myTable (
...
) CHARACTER SET utf8 COLLATE utf8_bin ENGINE=MyISAM;