Java 使用MySql Springdata和Hibernate时出现大小写问题
我有一个数据库,其中包含一个分配表。该表如下所示:Java 使用MySql Springdata和Hibernate时出现大小写问题,java,mysql,hibernate,jpa,spring-data,Java,Mysql,Hibernate,Jpa,Spring Data,我有一个数据库,其中包含一个分配表。该表如下所示: ID | CHARACTER_ASS | TYPE_ASS 字符列中存储字母和数字。即“A”、“A”、“Aa”。“AA”,1等。。。 现在,当我在查询控制台中执行以下查询时: select * from assignment a where a.CHARACTER_ASS = 'A' 它将返回数据库中的小写条目和大写条目。现在我一直在寻找这个问题的答案,有人告诉我这可能是因为我运行的是Windows操作系统。我查了一下,只发现使用/不使用小
ID | CHARACTER_ASS | TYPE_ASS
字符列中存储字母和数字。即“A”、“A”、“Aa”。“AA”,1等。。。
现在,当我在查询控制台中执行以下查询时:
select * from assignment a where a.CHARACTER_ASS = 'A'
它将返回数据库中的小写条目和大写条目。现在我一直在寻找这个问题的答案,有人告诉我这可能是因为我运行的是Windows操作系统。我查了一下,只发现使用/不使用小写(?)命名表名可能有问题
另一个问题是我使用的是spring数据。在spring数据中,我无法直接控制查询,因此我想知道是否有针对spring数据的特定修复
我想听听你对这个问题的回答:)
提前谢谢
编辑
我的显示创建表分配:
CREATE TABLE `assignment` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CHARACTER_ASS` varchar(45) NOT NULL,
`TYPE_ASS` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8
EDIT2
我将分配表排序规则更改为:latin1_general_cs,并尝试在MySql查询编辑器中手动查询,但结果仍然是A和A。
然后,我尝试将该表的排序规则调整为与该表相同的值。
我做错了什么,还是应该调整工作
EDIT3
好的,我刚修好。我没有使用拉丁语1_general_cs,而是使用utf8_bin。似乎utf8没有区分大小写的排序规则:)谢谢你为我指出了正确的方向 该字段的字符集和排序规则是什么
您是否可以执行SHOW CREATE TABLE tablename 创建表时指定区分大小写的排序规则:
CREATE TABLE assignment (
ID int(11) NOT NULL AUTO_INCREMENT,
CHARACTER_ASS varchar(45) NOT NULL,
TYPE_ASS int(11) NOT NULL,
PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8, COLLATE=latin1_general_cs
请注意,默认排序规则也可以在数据库级别全局设置:这是我在谷歌搜索“mysql区分大小写”时得到的第一个结果:我也发现了这一点,但这对我解释springdata的原因没有帮助。我不知道如何使用COLLATE和springdataDon't使用COLLATE。将表配置为使用二进制排序规则。你能举个例子让我投票给你并接受你的答案(如果它有效:)吗?所以所有的答案都是使用拉丁语?我可以将此作为所有项目的默认设置吗?或者说,使用它有什么坏处吗?当我运行代码时,会出现以下错误:错误代码:1253。排序规则“latin1\u general\u cs”对字符集“utf8”无效。请选择适合您的排序规则。但是,如果希望字符串比较区分大小写,则排序规则必须区分大小写或二进制。请参阅,并毫不犹豫地单击页面右侧的链接。show collation语句显示所有排序规则及其字符集您知道我最后一条评论的修复方法吗?show collation语句显示所有排序规则及其字符集。请参阅dev.mysql.com/doc/refman/5.0/en/charset-mysql.html