SELECT DISTINCT не работает

Почему этот запрос создает ошибку "Duplicate entry"?

TRUNCATE parim_firm_tag_names;
INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona 
    FROM parim_marksona;

Сообщение об ошибке:

Ошибка SQL (1062): Дублируемая запись '1 -?????????????" для ключа 'Firm_tag_name_value'

Как вы можете видеть, firm_tag_name_value имеет уникальный индекс, я использую DISTINCT select и я усекаю все существующие данные из tag_names.

Что может вызвать эту ошибку?

Ответы

Ответ 1

Это может происходить из-за разных collations, определенных в обеих таблицах parim_firm_tag_names и parim_marksona, поскольку сравнение строк с использованием отдельных может приводить к различным значениям для чувствительных к регистру и нечувствительных к регистру значений collation.

Вы можете проверить столбцы collation столбцов, используя этот запрос:

SHOW FULL COLUMNS FROM parim_marksona;
SHOW FULL COLUMNS FROM parim_firm_tag_names;

Чтобы избежать этой ошибки, вы можете преобразовать сортировку столбца sona в сортировку столбца firm_tag_name_value с помощью COLLATE, выбрав различные значения из таблицы parim_marksona.

Предполагая сопоставление столбца firm_tag_name_value как latin1_swedish_cs:

TRUNCATE parim_firm_tag_names;

INSERT INTO parim_firm_tag_names (firm_tag_name_value)
    SELECT DISTINCT sona COLLATE latin1_swedish_cs
    FROM parim_marksona;

Это должно работать без ошибок.

Подробнее см. руководство Набор и сортировка символов столбца.

Ответ 2

Различные наборы символов между двумя таблицами, возможно?