¿La [:ascii:]
clase funciona en Postgres? No aparece en su ayuda , sin embargo, veo ejemplos en la web que lo utilizan.
Tengo una base de datos UTF-8, donde se encuentran colación y c_typ e en_US.UTF-8
, y la versión de Postgres es 9.6.2. Cuando busco filas no ASCII como esta:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
Consigo tanto Unicode y no Unicode símbolos (salida completa es aquí ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
¿Qué hay de malo en esta consulta?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
fuente
fuente
regexp_replace()
para marcar sus caracteres no ASCII. Mira mi respuesta.[:ascii:]
clase de todos modos. Lo que realmente me ayudó en este problema es un concepto de bloques unicode, que aprendí de esta fabulosa expresión regular tutorial .Respuestas:
Para responder a su pregunta:
[:ascii:]
funciona. Es posible que tenga algunos caracteres en su texto que no reconoce como no ASCII , pero están allí. Pueden ser algo así como un espacio no rompible , por ejemplo, o cualquier otro carácter de espacio Unicode .No es extraño tener espacios no rompibles (
) en los textos que copia y pega desde una página web, pero no se da cuenta de que están allí.Aquí hay un ejemplo para mostrar:
Eso es lo que obtienes:
De esto puede ver que su problema es el carácter de apóstrofe correcto . ASCII solo es compatible con el apóstrofe. El apóstrofe izquierdo y el apóstrofe derecho son extensiones Unicode tipográficamente correctas.
dbfiddle aquí
Puede verificarlo también con versiones anteriores en http://rextester.com/UKIQ48014 (PostgreSQL 9.5) y http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Los textos que creo que crees que son ASCII puros, y no lo son :
dbfiddle aquí
Estos textos están usando 'en lugar de ' para marcar apóstrofes.
Verifique la puntuación: ¿Por qué la comilla simple correcta (U + 2019), y no el apóstrofe semánticamente distinto (U + 0027), es el carácter de apóstrofe preferido en Unicode? ... para ver que no eres la primera persona que encuentra este problema.
fuente