gpt4 book ai didi

mysql - 如何在 MySQL 中找到非键盘字符?

转载 作者:可可西里 更新时间:2023-11-01 07:46:57 25 4
gpt4 key购买 nike

How can I find non-ASCII characters in MySQL? 相关的问题.

我想在下表中检查 col1 和 col2 是否存在非键盘字符。

+------------+----------+
| col1 | col2 |
+------------+----------+
| rewweew\s | 4rtrt |
| é | é |
| 123/ | h|h |
| ëû | û |
| ¼ | ¼ |
| *&^ | *%$ |
| #$ | ~!` |
+------------+----------+

我想要的结果是这样的

 +--------+-------+
| é | é |
| ëû | û |
| ¼ | ¼ |
+--------+-------+

在我的例子中,允许出现在英文键盘中的所有字符,我只需要找出英文键盘中不存在的字符的行,如中文字符等。

我从链接 How can I find non-ASCII characters in MySQL? 得到了下面提到的查询

SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9.,-]';

但它不起作用,因为字符 ~`@!#$%^&*()_-+=|}]{[':;?/>.< 也被允许,但它忽略了它们。

最佳答案

这可能值得一试。

SELECT whatever
FROM tableName
WHERE columnToCheck <> CONVERT(columnToCheck USING ASCII)

CONVERT(col USING charset) 函数会将不可转换的字符转换为替换字符。那么,转换后和未转换的文本将不相等。

当然,它基于 ASCII 字符表中的内容,而不是特定键盘上的内容。但它可能应该为你做的伎俩。请参阅此以获取更多讨论。 http://dev.mysql.com/doc/refman/5.0/en/charset-repertoire.html

您可以使用您希望的任何字符集名称代替 ASCII。例如,如果您想找出代码页 1257(立陶宛语、拉脱维亚语、爱沙尼亚语)中哪些字符无法正确呈现,请使用 CONVERT(columnToCheck USING cp1257)

编辑您的评论提到您还需要检测 ASCII 字符集中的一些字符。我认为你问的是所谓的控制字符,它的值从 0x00 到 0x1f,然后是 0x7f。 @Joni Salonen 的方法帮助我们实现了目标,但我们需要以多字节字符安全的方式进行。

 SELECT whatever
FROM tableName
WHERE CONVERT(columnToCheck USING ASCII) <> columnToCheck
OR CONVERT(columnToCheck USING ASCII) RLIKE '[[.NUL.]-[.US.][.DEL.]]'

如果你看http://www.asciitable.com/ ,您会看到此处的 OR 子句检测 ASCII 表第一列中的字符,以及第四列中的最后一个字符。

关于mysql - 如何在 MySQL 中找到非键盘字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739645/

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