mysql唯一的两列错误

时间:2016-04-04 21:33:32

标签: mysql unique-key

我在MySQL中创建唯一键约束时遇到错误。我在MySQL中有一个独特的键约束。我有一个包含两列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`);

错误讯息:

重复条目'F:\ Fileserver \ OM \ OM_ADMINISTRATIVO \ VIAGEM \Autorizações\ 2014 \ 10'关键'caminho'

表格内容:

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

[]中

2 个答案:

答案 0 :(得分:0)

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

您还可以尝试查询:

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

%表示之前或之后可以有更多字符,这将返回包含“Autorizações”的所有结果。

尝试找到类似的结果,希望有所帮助

答案 1 :(得分:0)

我认为问题来自这两行:

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

当然是整理问题,请尝试这两个命令,您将看到差异:

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

第一场比赛,第二场比赛没有。

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