我想返回包含除字母、数字和空格之外的任何其他字符的所有行,但我也想将匈牙利字母列入白名单。但是,当我运行以下脚本时:
SELECT
*
FROM
table T
WHERE
T.columnname REGEXP '[^a-zA-Z0-9 áéíóöőúüű]';
它给出了这个错误:
SQL 错误 (1267):操作“regexp”的排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8mb4_general_ci,COERCIBLE) 的非法混合
正确的做法是什么?
事情是怎样的?
因为“Mojibake”而变得一团糟。 每个重音字母都存储为两个“latin1”字节。
反之亦然。
WHERE T.columnname REGEXP '[^a-zA-Z0-9 áéíóöőúüű]' 字符集 utf8
在进一步解决问题之前,请提供
SHOW CREATE TABLE T;
SELECT HEX(columnname) FROM T ...; -- (for a sample)
您将如何处理返回的行? 这可能会影响答案。
大约十年前,“latin1”是存储重音字母的“错误”方式。 因此,我还建议将数据集转换为 utf8mb4。 您运行的 MySQL 版本是什么? (这会影响 utf8mb4 是否可用以及正则表达式是否可以处理注释中的内容。)