选择包含非ASCII字符的行

4
这里是问题:我从Mochimedia导入了约20000个游戏描述到我的数据库,但有许多外国游戏,我不想列出。
我提出了这个查询来查找带有非ASCII字符的列。
SELECT * FROM TABLE WHERE NOT HEX(COLUMN) REGEXP '^([0-7][0-9A-F])*$';

请注意,我在StackOverflow上找到了这个解决方案,而我不是MySQL查询方面的专家。
然而,虽然此查询可以捕获许多外语描述,但有时也会失败并找到完全正常的描述,因此我要寻求微调此查询以跳过“好”的描述。
以下是一些返回的“好”的行:
游戏男孩果酱游戏,使用游戏男孩的限制。这是一个西方平台游戏,您扮演城镇的警长。你的任务是抓住土地上所有坏蛋,并将他们绳之以法。
还有一个例子
如果你的主人笨手笨脚,那么做小猫是很困难的!昨天她在公园里丢失了很多东西,现在就轮到你去找它们了!那天的回忆可能有用——你应该记得最后在哪里看到了那个东西,并在那里搜索。地图对你的任务也有帮助。最后,你可以爬到树上问一只大猫要提示——你会再次看到那天发生的所有事件。但有时仅仅找到一个失物是不够的。公园里的一些居民可能已经在使用它了——无论是老鼠还是蚂蚁。在这种情况下,你可能需要给他们带点什么来换回失物——只有这样你才能找回它。
最后一个例子
饥饿的蜜蜂是一款独特的有趣游戏。它包括平台游戏、益智游戏、冒险游戏、角色扮演游戏的乐趣。在这个幻想游戏中,你需要让蜜蜂收集所有花朵才能赢得比赛。随着级别的提高,新的挑战将被引入,并逐渐变得艰难。总体而言,这是一种完全融合了乐趣的游戏,可以让人们沉迷于其中数小时。 GOI:评分4.5/5
请记住,我不是MySQL专家,所以我只能猜测问题是什么,我的猜测是某些字符,如It’s中的’或字符-和:可能会导致这种情况。
也许有人愿意分享一个优化的查询来解决这个问题?我花了很多时间来做这件事,但考虑到我仍然是php的新手,绝对不是REGEXP和MySQL查询方面的专家,所以能在这里得到一些帮助是很好的,这样我就可以提高我的知识水平。如果你只是把它扔给我,不要假设我会理解任何你说的话,详细的帮助将是很好的。
感谢你花时间阅读这篇文章。

它们不一定是“外来的”,这本身就是一个观点问题。对于有些人来说,“ç”或“ß”根本就不算外来的。你所指的是“非ASCII码字符”。甚至连“ö”在英文中也会偶尔使用。 - tadman
感谢您的评论。我已更改标题,以使其更加清晰易懂。 - Marcus Weller
4
好的,一个丰富多彩的可能性选择;-) - Strawberry
这个正则表达式只接受ASCII字符:^(\x20-\xff])*$ - 请注意,像öß这样的字符是有效的ASCII值。如果你想忽略扩展的ASCII值,你的正则表达式将会是这样的:^(\x20-\x7e)*$,但要注意这样会忽略破折号和引号等字符... - Benny Hill
问题显然在编码上。当您尝试运行此查询 - select hex("It’s"),它返回4974E2809973,其中 %E2 %80 %99 是 ’ 的 UTF-8 字节。这是从第一个失败描述的示例中复制的。 - hynner
@BennyHill ASCII 严格来说是7位编码。扩展的ASCII,例如ANSI标准版本,尽管通常被称为“ASCII”,但在技术上是不同的。你链接的实际上是Windows-1252 - tadman
1个回答

8
如果您只是想查找包含非ASCII字符的列,可以使用以下查询:
SELECT * 
FROM table 
WHERE column != CONVERT(column USING ASCII);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接