Ed *_*ays 116 mysql character-encoding
我正在使用MySQL数据库,该数据库包含从Excel导入的一些数据.数据包含非ASCII字符(em破折号等)以及隐藏的回车符或换行符.有没有办法使用MySQL查找这些记录?
O. *_*nes 210
MySQL提供全面的字符集管理,可以帮助解决这类问题.
SELECT whatever
FROM tableName
WHERE columnToCheck <> CONVERT(columnToCheck USING ASCII)
Run Code Online (Sandbox Code Playgroud)
该CONVERT(col USING charset)函数将不可转换的字符转换为替换字符.然后,转换和未转换的文本将是不相等的.
有关更多讨论,请参阅此处 http://dev.mysql.com/doc/refman/5.7/en/charset-repertoire.html
您可以使用任何您想要的字符集名称代替ASCII.例如,如果您想在代码页1257(立陶宛语,拉脱维亚语,爱沙尼亚语)中找出哪些字符无法正确呈现,请使用CONVERT(columnToCheck USING cp1257)
zen*_*nde 92
您可以将ASCII定义为十进制值为0 - 127(0x00 - 0x7F)的所有字符,并使用以下查询查找具有非ASCII字符的列
SELECT * FROM TABLE WHERE NOT HEX(COLUMN) REGEXP '^([0-7][0-9A-F])*$';
Run Code Online (Sandbox Code Playgroud)
这是我能提出的最全面的查询.
Cha*_*rch 60
它完全取决于您所定义的"ASCII",但我建议尝试这样的查询变体:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9]';
Run Code Online (Sandbox Code Playgroud)
该查询将返回columnToCheck包含任何非字母数字字符的所有行.如果您有其他可接受的字符,请将它们添加到正则表达式中的字符类.例如,如果句点,逗号和连字符都正常,请将查询更改为:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9.,-]';
Run Code Online (Sandbox Code Playgroud)
MySQL文档中最相关的页面可能是12.5.2正则表达式.
小智 42
这可能是你正在寻找的:
select * from TABLE where COLUMN regexp '[^ -~]';
Run Code Online (Sandbox Code Playgroud)
它应返回COLUMN包含非ASCII字符的所有行(或不可打印的ASCII字符,如换行符).
Rob*_*ley 14
上面每个人的例子中缺少一个字符是终止字符(\ 0).这对于MySQL控制台输出是不可见的,并且不能被迄今提到的任何查询发现.查找它的查询很简单:
select * from TABLE where COLUMN like '%\0%';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104754 次 |
| 最近记录: |