gpt4 book ai didi

mysql - 在 MySQL 中,为什么非 ASCII 字符真的是两个字符?

转载 作者:行者123 更新时间:2023-11-29 04:53:07 27 4
gpt4 key购买 nike

我有一个默认编码设置为 utf8 的 MySQL 数据库。所以使用非 ASCII 字符应该没有问题。但是当涉及到通过 REGEXP 命令的正则表达式时,它似乎有点困难。

我正在尝试使用通配符根据正则表达式查询记录。 MySQL 提供的功能对我来说已经足够了,但它们似乎有些破损,因为非 ASCII 字符(我试过 § 和 °)不是由一个通配符匹配,而是由两个通配符匹配。

例如,如果我在数据库中搜索名为“§123”的维基页面,那么

SELECT * FROM wikipages WHERE title REGEXP '^.123$'

不会返回任何东西,但是

SELECT * FROM wikipages WHERE title REGEXP '^..123$'

返回所需的页面(注意附加的通配符)。

对于 ASCII 字符,只需要一个通配符。我想这与使用多少字节来编码 utf8 中的字符有关。但是,我发现这种行为相当丑陋,因为如果 MySQL 不平等对待所有字符,我将无法使用正则表达式。

实际上是否有充分的理由说明它没有像预期的那样工作?有没有人知道如何解决我的问题?

提前致谢!

最佳答案

Warning

The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

UTF-8 是一种潜在的多字节字符集。基本上,尝试在 REGEXP 中针对 UTF-8 字符进行通配符匹配有时会失败。

您可以搜索特定字符(它会自动扩展到正确的字节数),或者您可以使用非正则表达式模式匹配(例如 LIKE),例如前缀/后缀搜索。

关于mysql - 在 MySQL 中,为什么非 ASCII 字符真的是两个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com