与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.,-]';但是它不起作用,因为字符~`@!#$%^&*()-+= But }]{[‘:;?/>.<,但它忽略了它们。
发布于 2012-07-31 12:49:16
这可能值得一试。
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表的第一列中的字符,以及第四列中的最后一个字符。
发布于 2012-07-31 12:56:02
此查询将返回在ASCII范围0-127以外具有字符的行:
SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '^[[.NUL.]-[.DEL.]]*$'英语键盘是指美国键盘还是英国键盘?英国键盘包括一些非ASCII字符,如英镑符号.如果您也想接受这些,就必须将它们添加到正则表达式中。
https://stackoverflow.com/questions/11739645
复制相似问题