Код ошибки: 1267. Недопустимое сочетание параметров сортировки (latin1_swedish_ci, IMPLICIT) и (utf16le_general_ci, COERCIBLE) для операции '=' - PullRequest
0 голосов
/ 30 мая 2019

Я хочу проверить, сколько записей имеют одинаковые значения в двух столбцах одной и той же таблицы. Я извлекаю регулярное выражение из второго столбца и сравниваю его с первым.

select count(*)
from tbl
where col1 =  REGEXP_REPLACE(col2, 'https?://([A-Za-z]+).*', '$1');

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

Код ошибки: 1267. Неверное смешение параметров сортировки (latin1_swedish_ci, IMPLICIT) и (utf16le_general_ci, COERCIBLE) для операция '='

col1 имеет тип LONGTEXT, а col2 имеет тип VARCHAR. Оба имеют набор символов по умолчанию и параметры сортировки по умолчанию в свойствах поля.

Я использую MySQL Workbench 8 и MySQL 8 +.

Почему я получаю эту ошибку? Как решить проблему, выполнить запрос и сравнить два значения на лету, не создавая новый столбец и обновив таблицу с помощью регулярного выражения.

EDIT:

Пример данных:

 col1         | col2
==============================================
dev           | https://dev.mysql.com/doc/

РЕДАКТИРОВАТЬ 2: Полный тестовый пример:

Таблица:

CREATE TABLE `test` (
  `url` varchar(1500) NOT NULL,
  `regex` varchar(1500) DEFAULT NULL,
  PRIMARY KEY (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Данные (столбцы, разделенные запятыми):

https://dev.mysql.com/doc/refman/, dev
https://mail.google.com/mail/u, mail

Выберите запрос:

SELECT REGEXP_REPLACE(`test`.`url`, 'https?://([A-Za-z]+).*', '$1') 
FROM myschema.test;

Результат:

dev
mail

Нерабочий запрос

select count(*)
from myschema.test
where `test`.`regex` =  REGEXP_REPLACE(`test`.`url`, 'https?://([A-Za-z]+).*', '$1');

Error

Error Code: 1267. Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf16le_general_ci,COERCIBLE) for operation '='

Ожидаемый результат:

https://dev.mysql.com/doc/refman/, dev
https://mail.google.com/mail/u, mail
...