我的POJO有一个属性utf8mb4_bin
,它应该是唯一的,因此我用Column1 Column2 Column3
------- ------- -------
123
231 123 Abc
431 123 Abc
注释了它。长度默认为255,我使用MySQL 5.5,数据库排序规则设置为Column1 Column2 Column3
------- ------- -------
123 Abc
231 123 Abc
431 123 Abc
。我知道我无法在列上指定唯一约束,但是我想知道为什么我的日志文件中没有关于创建失败索引的警告/错误。 MySQL响应手动尝试创建索引"#1071 - 指定密钥太长;最大密钥长度为767字节"所以至少应该看到某种暗示,不应该这样吗?
有没有办法可以在运行时处理/捕获这些错误?例如。记录错误消息,以便开发人员知道出现了问题。
我使用spring-boot-starter-parent作为maven-parent 1.4.2.RELEASE用于我的项目,并包含spring-boot-starter-data-jpa以添加所有相关的依赖项。这包括spring-data-jpa-1.10.5.RELEASE和hibernate-core-5.0.11。
答案 0 :(得分:1)
错误是由
引起的InnoDB的最大索引长度为767字节,因此对于utf8或utf8mb4列,最多可以索引255或191个字符。如果您当前具有索引长度超过191个字符的utf8列,则需要索引较少数量的字符。 https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
你使用的字段为255,而utf8mb4_bin的最大值为191,因此你得到索引没有被创建的错误o如果它是一个警告,它将创建索引,其最大值为191. / p>