2016-07-31 4 views
0

Я хочу добавить уникальное значение в столбцы, которые являются заголовком, языком и загрузкой (3 столбца). Поскольку у меня нет других возможностей, чтобы избавиться от дубликатов записей. Вот код:Как ADD CONSTRAINT UNIQUE для столбцов, содержащих больше символов, чем значение по умолчанию

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download); 

Но я получаю эту ошибку:

1071 - указанный ключ был слишком долго; максимальная длина ключа составляет 1000 байтов

Есть ли решение для этого? Но помните, что он должен соответствовать этим трем столбцам.

+1

Добавить четвертую колонку. Сохраните хэш из трех столбцов вместе (вы можете «склеить» их как строку и хэш). Сделайте столбец уникальным. Работа выполнена, длина всегда одна и та же. –

ответ

1

Кажется, что длина этих трех столбцов слишком длинная, я делаю тест, смотрю на нее.

drop table if exists datapdf; 
create table datapdf 
(
title varchar(200), 
language varchar(300), 
download varchar(510) 
); 

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download); 

Я получаю сообщение об ошибке так же, как и ваш.

Error Code: 1071. Specified key was too long; max key length is 767 bytes 

Но если изменить структуру таблицы datapdf, она бежит успеха.

drop table if exists datapdf; 
create table datapdf 
(
title varchar(100), 
language varchar(100), 
download varchar(100) 
); 

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download); 

Это Action.

ALTER TABLE datapdf ADD CONSTRAINT tb_uq UNIQUE (title, language, download) 

Таким образом, я могу изменить структуру вашей таблицы (если возможно), чтобы решить эту проблему. Однако, это нехорошее решение, потому что вы можете потерять свои данные. Одним из лучших решений является то, что @NB сказал (первый комментарий к этому вопросу): «
Добавьте четвертую колонку. Сохраните хэш 3 столбцы объединены. Сделайте столбец уникальным. "

+0

Спасибо, что достойно. –

+0

Ну, этот ответ неправильный, грустно. Вы не можете изменить длину столбцов, чтобы они могли вписаться в уникальное ограничение. Что произойдет, если у меня есть текстовые столбцы, и если у меня есть еще 20 столбцов, которые в совокупности дают что-то уникальное? Должен ли я стереть их длину и потерять свои данные, или я должен придумать что-нибудь умнее? Я не против, если вы сделаете мой первый комментарий и добавьте его в ответ. Таким образом, вы собираетесь ввести в заблуждение будущих посетителей, которые подумают, что им нужно изменить структуру данных - и они этого не делают. –

+0

@ N.B .: Я прочитал ваш комментарий, вы правы! Сохранить хэш из трех столбцов вместе, это отличное решение. Я отредактирую свой ответ. Большое спасибо! – robothy

 Смежные вопросы

  • Нет связанных вопросов^_^