错误代码:1267。非法混合使用排序规则(latin1_swedish_ci,IMPLICIT)和(utf16le_general_ci,COERCIBLE)操作'='

时间:2019-05-30 09:04:14

标签: mysql regex mysql-workbench

我想检查同一张表的两列中有多少条记录具有相等的值。我从第二列中提取正则表达式,并将其与第一列进行比较。

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 +。

为什么会出现此错误?如何解决问题并运行查询并即时比较两个值,而无需创建新列,并使用正则表达式更新表。

编辑:

数据示例:

 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 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

0 个答案:

没有答案