在MySQL中强制使用唯一的行

Mik*_*mer 2 mysql indexing mysql-error-1071

我有一个表MySQL有3个字段,我想强制两个字段之间的唯一性.这是表格DDL:

CREATE TABLE `CLIENT_NAMES` (
`ID` int(11) NOT NULL auto_increment,
`CLIENT_NAME` varchar(500) NOT NULL,
`OWNER_ID` int(11) NOT NULL,
PRIMARY KEY  (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

ID字段是代理键(此表正在加载ETL).该CLIENT_NAME字段包含客户端名称.id OWNER_ID是指示客户所有者.

我以为我可以用一个唯一索引执行本CLIENT_NAMEOWNER_ID,

ALTER TABLE `DW`.`CLIENT_NAMES` 
ADD UNIQUE INDEX enforce_unique_idx(`CLIENT_NAME`, `OWNER_ID`);
Run Code Online (Sandbox Code Playgroud)

但是MySQL给了我一个错误:

执行SQL命令以更新表时出错.指定密钥太长; 最大密钥长度为765字节(错误1071)

其他人有什么想法吗?

Gil*_*ili 9

MySQL不能对长度超过765字节的密钥强制执行唯一性(显然500个UTF8字符可以超过此限制).

  1. CLIENT_NAME真的需要500个字符吗?似乎有点过分.
  2. 添加一个新的(更短的)哈希列(CLIENT_NAME).获取MySQL以强制执行该哈希的唯一性.

  • 乔,我猜你的意思是UTF8,而不是Unicode ...? (2认同)