如何在表格中搜索不包括某些匈牙利字母的特殊字符?

问题描述 投票:0回答:1

我想返回包含除字母、数字和空格之外的任何其他字符的所有行,但我也想将匈牙利字母列入白名单。但是,当我运行以下脚本时:

SELECT
    *
FROM
    table T
WHERE
    T.columnname REGEXP '[^a-zA-Z0-9 áéíóöőúüű]';

它给出了这个错误:

SQL 错误 (1267):操作“regexp”的排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8mb4_general_ci,COERCIBLE) 的非法混合

正确的做法是什么?

sql regex mariadb special-characters collation
1个回答
0
投票

事情是怎样的?

  • 表(和列)是 latin1 但“SHOW VARIABLES LIKE char%”表示“utf8”(或 utf8mb4)?

因为“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 是否可用以及正则表达式是否可以处理注释中的内容。)

© www.soinside.com 2019 - 2024. All rights reserved.