1

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

ID | CHARACTER_ASS | TYPE_ASS

字符列内存储字母和数字。IE。“A”、“A”、“A”。“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

编辑2

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

编辑3

好的,我刚刚修复了它。我没有使用 latin1_general_cs,而是使用了 utf8_bin。似乎 utf8 没有区分大小写的排序规则 :) 感谢 JB Nizet 为我指明了正确的方向!

4

2 回答 2

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

于 2012-05-11T20:45:16.383 回答
0

该字段的字符集和排序规则是什么?

你能执行 SHOW CREATE TABLE 表名吗?

于 2012-05-11T20:30:08.767 回答