mysql 独特的两列错误

mysql unique two column error

我在 MySQL 中创建唯一键约束时遇到错误。我在 MySQL 中有一个唯一的键约束。我有一个 table 有两列 VARCHAR() 类型,我需要用这两列创建一个唯一的键约束,但是当我创建重复记录时发生错误。我确定这不是重复记录,因为这两列代表 Windows 中目录的内容列表,默认情况下不接受同一文件夹中的相同文件名。

创建语句:

DROP TABLE IF EXISTS `filelist`.`fileserver`;
CREATE TABLE  `filelist`.`fileserver` (
  `nome` varchar(300) NOT NULL,
  `caminho` varchar(500) NOT NULL,
  `dataCriacao` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `dataUltimoAcesso` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `dataUltimaModificacao` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `tamanho` bigint(20) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

创建唯一键约束的命令:

ALTER TABLE filelist.fileserver ADD UNIQUE(`caminho`, `nome`);

错误信息:

密钥 'caminho'

的重复条目 'F:\Fileserver\OM\OM_ADMINISTRATIVO\VIAGEM\Autorizações14'

Table内容:

SELECT * FROM filelist.fileserver WHERE caminho LIKE 'F:\\Fileserver\\OM\\OM_ADMINISTRATIVO\\VIAGEM\\Autorizações\\2014\\10%' ORDER BY nome;

nome
Alex - 02 a 03 de outubro.pdf
Alex - 28 a 31 de outubro.pdf
Antonio e Donizete - 17 de outubro.pdf
Arianny - 27 a 28 de outubro.pdf
Denison - 07 a 10 de outubro.pdf
Denison - 29 a 31 de outubro.pdf
Edeildo - 14 a 17 de outubro.pdf
Edeildo - 27 a 31 de outubro.pdf
Edeildo - 29 de setembro a 01 de outubro.pdf
Guilherme - 14 de outubro.pdf
Guilherme - 16 de outubro.pdf
Guilherme - 21 a 23 de outubro.pdf
Guilherme - 27 de outubro.pdf
Jan - 30 de setembro a 10 de outubro.pdf
Jan - 30 de setembro a 24 de outubro.pdf
Jose Eduardo - 12 a 17 de outubro.pdf
José Eduardo - 12 a 17 de outubro.pdf
Lucette - 29 de outubro a 07 de novembro.pdf
Lucette - 30 de setembro a 2 de outubro.pdf
Luis - 06 a 07 de outubro.pdf
Luis Claudio - 09 a 10 de outubro.pdf
Luis Claudio - 30 a 31 de outubro.pdf
Mariana - 01 a 03 de outubro.pdf
Mateus - 16 a 19 de outubro.pdf
Mauricio - 13 a 17 de outubro.pdf
Paulo - 14 a 17 de outubro.pdf
Paulo - 27 a 31 de outubro.pdf
Paulo - 29 de setembro a 01 de outubro.pdf
Rogério - 09 a 10 de outubro.pdf
Ronaldo - 02 a 03 de outubro.pdf
Ronaldo - 06 a 07 de outubro.pdf
Ronaldo - 16 de outubro.pdf
Ronaldo - 21 de outubro.pdf
Ronaldo - 27 a 28 de outubro.pdf
Ronaldo - Locação de Veículo.pdf
Silvana - 05 a 10 de outubro.pdf
Silvana - 05 a 24 de outubro.pdf
Tiago - 07 a 10 de outubro.pdf

[]s

有些在你的数据库中,caminho 的值:'F:\Fileserver\OM\OM_ADMINISTRATIVO\VIAGEM\Autorizações14' 已经保存,在没有 \\ 的情况下执行你的“select * from ..”,你应该会找到它。

您也可以尝试查询:

Select * from * FROM filelist.fileserver WHERE caminho LIKE '%Autorizações%'

% 表示前后可以有更多字符,这将 return 所有包含 'Autorizações' 的结果。

尝试寻找相似的结果,希望对您有所帮助

我认为问题出在这两行:

Jose Eduardo - 12 a 17 de outubro.pdf
José Eduardo - 12 a 17 de outubro.pdf

肯定是排序规则问题,试试这 2 个命令,你会看到区别:

SELECT 'é' = 'e' COLLATE utf8_general_ci;
SELECT 'é' = 'e' COLLATE utf8_bin;

第一次匹配,第二次不匹配

一个解决方案是更改 table 默认排序规则。 您还可以按列更改排序规则,但我不知道约束将使用哪个值...