Я хочу проверить, сколько записей имеют одинаковые значения в двух столбцах одной и той же таблицы. Я извлекаю регулярное выражение из второго столбца и сравниваю его с первым.
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