[:ascii:]
类在 Postgres 中是否有效?它没有在他们的帮助中列出,但是我在网上看到了使用它的示例。
我有一个 UTF-8 数据库,其中collat ion和c_type e 是en_US.UTF-8
,Postgres 版本是 9.6.2。当我搜索这样的非 ASCII 行时:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
我得到了Unicode 和非 Unicode 符号(完整输出在这里):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
这个查询有什么问题?
回答你的问题:
[:ascii:]
有效。您的文本中可能有一些您无法识别为non-ASCII 的字符,但它们确实存在。例如,它们可以是不可破坏的空格,也可以是任何其他Unicode 空格字符。从网页复制粘贴的文本中包含不可破坏的空格( )并不奇怪,但您却没有注意到它们的存在。
这是一个示例:
这就是你得到的:
您可以从中看出,您的问题是右撇号字符。ASCII 仅支持撇号。左撇号和右撇号是印刷正确的 Unicode 扩展。
dbfiddle在这里
您也可以在http://rextester.com/UKIQ48014 (PostgreSQL 9.5) 和http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)上查看以前的版本
我猜你认为的文本是纯 ASCII,而不是:
dbfiddle在这里
这些文本使用'而不是'来标记撇号。
检查标点符号:为什么正确的单引号 (U+2019),而不是语义上不同的撇号 (U+0027),是 Unicode 中的首选撇号字符?...看到你不是第一个遇到这个问题的人。