相关问题如何在MySQL中找到非ASCII字符?.
我想在下面给出的表中检查col1和col2,以了解非键盘字符存在的情况.
+------------+----------+
| col1 | col2 |
+------------+----------+
| rewweew\s | 4rtrt |
| é | é |
| 123/ | h|h |
| ëû | û |
| ¼ | ¼ |
| *&^ | *%$ |
| #$ | ~!` |
+------------+----------+
Run Code Online (Sandbox Code Playgroud)
我想要的结果看起来像
+--------+-------+
| é | é |
| ëû | û |
| ¼ | ¼ |
+--------+-------+
Run Code Online (Sandbox Code Playgroud)
在我的情况下,允许使用英文键盘中的所有字符,我只需要查找具有英文键盘中不存在的字符的行,如汉字等.
我从链接中获得了下面提到的查询如何在MySQL中找到非ASCII字符?
SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9.,-]';
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为字符~` @!#$%&*()_- + = |}] {[':;?/>.<,也是允许但忽略了它们.
O. *_*nes 10
这可能值得一试.
SELECT whatever
FROM tableName
WHERE columnToCheck <> CONVERT(columnToCheck USING ASCII)
Run Code Online (Sandbox Code Playgroud)
该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.]]'
Run Code Online (Sandbox Code Playgroud)
如果你看一下http://www.asciitable.com/,你会发现这里的OR子句检测到ASCII表第一列中的字符,以及第四列中的最后一个字符.
归档时间: |
|
查看次数: |
4498 次 |
最近记录: |