La [:ascii:]
classe fonctionne- t - elle à Postgres? Il n'est pas répertorié dans leur aide , mais je vois des exemples sur le Web qui l'utilisent.
J'ai une base de données UTF-8, où le classement et c_typ e sont en_US.UTF-8
, et la version Postgres est 9.6.2. Lorsque je recherche des lignes non ASCII comme celle-ci:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
Je reçois les deux symboles Unicode et non Unicode (sortie complète est ici ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
Quel est le problème avec cette requête?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
la source
la source
regexp_replace()
pour marquer vos caractères non ASCII. Voir ma réponse.[:ascii:]
classe. Ce qui m'a vraiment aidé dans ce problème est un concept de blocs unicode, que j'ai appris de cette fabuleuse expression régulière tutoriel .Réponses:
Pour répondre à votre question:
[:ascii:]
ça marche. Vous pouvez avoir des caractères dans votre texte que vous ne reconnaissez pas comme non-ASCII , mais ils sont là. Ils peuvent être quelque chose comme un espace insécable , par exemple, ou tout autre caractère d'espace Unicode .Il n'est pas étrange d'avoir des espaces insécables (
) dans les textes que vous copiez et collez à partir d'une page Web, mais vous ne remarquez pas qu'ils sont là.Voici un exemple à montrer:
C'est ce que tu as:
Vous pouvez voir de cela que votre problème est le caractère d'apostrophe droite . ASCII ne prend en charge que l'apostrophe. L'apostrophe gauche et l'apostrophe droite sont des extensions Unicode typographiquement correctes.
dbfiddle ici
Vous pouvez également le vérifier avec les versions précédentes sur http://rextester.com/UKIQ48014 (PostgreSQL 9.5) et http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Les textes que je pense que vous pensez sont purement ASCII, et ne le sont pas :
dbfiddle ici
Ces textes utilisent « au lieu de » pour marquer les apostrophes.
Vérifiez la ponctuation: pourquoi la bonne citation unique (U + 2019), et non l'apostrophe sémantiquement distincte (U + 0027), le caractère d'apostrophe préféré dans Unicode? ... pour voir que vous n'êtes pas la première personne à rencontrer ce problème.
la source