【问题标题】:Issue with uppercase and lowercase using MySql Springdata and Hibernate使用 MySql Springdata 和 Hibernate 的大小写问题
【发布时间】:2012-05-20 10:35:26
【问题描述】:

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

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

EDIT2

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

EDIT3

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

【问题讨论】:

  • 这是我在谷歌上搜索“mysql case-sensitive”时得到的第一个结果:dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
  • 我也发现了,但它不会帮助我导致 springdata。我不知道将 COLLATE 与 springdata 一起使用
  • 不要使用整理。将表配置为使用二进制排序规则。
  • 您能否发布一个示例,以便我为您投票并接受您的回答(如果可行:))

标签: java mysql hibernate jpa spring-data


【解决方案1】:

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

你能执行 SHOW CREATE TABLE 表名吗?

【讨论】:

    【解决方案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

    【讨论】:

    • 所以这一切的答案是使用latin1_general_cs?我可以将此作为我所有项目的默认设置吗?或者使用这个有缺点吗
    • 当我运行你的代码时,我收到以下错误:错误代码:1253。COLLATION 'latin1_general_cs' 对 CHARACTER SET 'utf8' 无效
    • 选择适合您的排序规则。但是,如果您希望字符串比较区分大小写,则排序规则必须区分大小写或二进制。请参阅dev.mysql.com/doc/refman/5.0/en/charset-mysql.html,不要犹豫,点击页面右侧的链接。 show collat​​ion 语句显示所有排序规则及其字符集
    • 你知道我上一条评论的解决方法吗?
    • show collat​​ion 语句显示所有排序规则及其字符集。请参阅 dev.mysql.com/doc/refman/5.0/en/charset-mysql.html
    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多