首页 > 解决方案 > 检查 UNIQUE CONSTRAINT 时是否会截断值?

问题描述

MySQL 5.7 版

我们的应用程序面临一个奇怪的问题。我们有一个保存地址的地址表。我们从Google Place API中获取它们,因此我们还保存了Google Place ID,这是 Google 的地点(也是地址)的唯一标识符。

这个 Google Place ID 可能很长,例如:EicxMyBNYXJrZXQgU3QsIFdpbG1pbmd0b24sIE5DIDI4NDAxLCBVU0EiGhIYChQKEgnRTo6ixx-qiRHo_bbmkCm7ZRAN

所以这是问题/异常:

An exception occurred while executing 'INSERT INTO address (uuid, house_no, external_identifier, created_at, updated_at, updated_by, street_uuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["\x11\xeb\x9f\x62\x13\x5a\x89\x38\x81\x67\x1a\x01\xce\x9f\xe3\x65", "unknown", "EjpKdXN0dXMtTGllYmlnLVN0cmHDn2UsIDk1NDQ3IEJheXJldXRoLCBCYXllcm4sIERldXRzY2hsYW5kIi4qLAoUChIJh7MuLzW9oUcRH2HnYygz6YYSFAoSCTHQM6Q4vaFHEYAX0B4stx0c", "2021-04-17 11:48:34", null, null, "\x11\xeb\x9f\x62\x12\xd4\x2a\x8c\x9b\x2e\x1a\x01\xce\x9f\xe3\x65"]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'EjpKdXN0dXMtTGllYmlnLVN0cmHDn2UsIDk1NDQ3IEJheXJldXRoLCBCYXllcm4s' for key 'UNIQ_667113G26DD00CB8'

如果您注意到,我们尝试在此处保存的值是:EjpKdXN0dXMtTGllYmlnLVN0cmHDn2UsIDk1NDQ3IEJheXJldXRoLCBCYXllcm4sIERldXRzY2hsYW5kIi4qLAoUChIJh7MuLzW9oUcRH2HnYygz6YYSFAoSCTHQM6Q4vaFHEYAX0B4stx0c

但例外只是提到我们要保存在数据库中的 Google Place ID 的前 64 个字符:EjpKdXN0dXMtTGllYmlnLVN0cmHDn2UsIDk1NDQ3IEJheXJldXRoLCBCYXllcm4s

所以我的问题...... MySQL 在检查 UNIQUE CONSTRAINS 时是否只比较有限数量的字符?

标签: mysqlunique-constraint

解决方案


推荐阅读