使用MySql Springdata和Hibernate的大写和小写问题

时间:2012-05-11 20:10:59

标签: java mysql hibernate jpa spring-data

我有一个包含Assignment表的数据库。该表如下所示:

ID | CHARACTER_ASS | TYPE_ASS

在字符列中存储字母和数字。 IE浏览器。 'A','a',“Aa”。 “AA”,1等...... 现在,当我在查询控制台中执行以下查询时:

select * from assignment a where a.CHARACTER_ASS = 'A'

它将返回我的数据库中的小写条目和大写条目。现在我一直在寻找这个问题的答案,有人告诉我这可能是因为我在Windows操作系统上运行。我看了这个,只能发现用/不用小写(?)命名表名可能有问题。

其他一个问题是我正在使用弹簧数据。在spring数据中我没有对查询的直接控制,所以我想知道是否有针对spring数据的特定修复。

我想听听你对这个问题的答案:)

提前致谢

修改

我的SHOW CREATE TABLE赋值:

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

我将我的Assignment表Collat​​ion更改为:latin1_general_cs,我尝试在MySql查询编辑器中手动查询,但我仍然得到A和后退结果。 然后我尝试将表的排序规则调整为与表格相同的值。 我做错了什么还是调整工作?

EDIT3

好的,我只是修复了它。而不是使用latin1_general_cs我使用了utf8_bin。似乎utf8没有Case Sensitive Collat​​ion :)谢谢JB Nizet指出我正确的方向!

2 个答案:

答案 0 :(得分:2)

创建表时指定区分大小写的排序规则:

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

请注意,默认排序规则也可以在数据库级别全局设置:http://dev.mysql.com/doc/refman/5.0/en/charset-database.html

答案 1 :(得分:0)

该字段的字符集和整理是什么?

你可以执行SHOW CREATE TABLE tablename;