¿Consulta MySQL para identificar personajes malos?

Tenemos algunas tablas que se configuraron con el conjunto de caracteres latinos en lugar de UTF-8 y permitieron que se ingresaran caracteres incorrectos en las tablas, el culpable habitual es que las personas copien / peguen desde Word o Outlook, que copia esos desagradables caracteres ocultos...

¿Hay alguna consulta que podamos usar para identificar estos caracteres para limpiarlos?

Gracias,

preguntado el 22 de mayo de 12 a las 16:05

Bueno, ¿a qué personajes llamas "malos personajes"? -

Nuestros chicos de ventas tienden a copiar / pegar muchos números de teléfono y obtenemos lo siguiente en las tablas 803-644-0100 â -

O algo así >> 803-644-0100 ‎ -

@xXPhenom22Xx ¿Podría darnos un poco más de detalles sobre la estructura de su tabla? Por ejemplo, ¿es esta una columna dedicada solo a números de teléfono? Una manera fácil de hacer esto... DESCRIBE "tablename"; -

2 Respuestas

Supongo que su conjunto de chacater de conexión se configuró en UTF8 cuando llenaste los datos.

MySQL reemplaza los caracteres no convertibles con ? (signos de interrogación):

SELECT  CONVERT('тест' USING latin1);

----
????

El problema es distinguir los signos de interrogación legítimos de los ilegítimos.

Por lo general, los signos de interrogación al comienzo de una palabra son una mala señal, así que esto:

SELECT  *
FROM    mytable
WHERE   myfield RLIKE '\\?[[:alnum:]]'

debería dar un buen comienzo.

contestado el 22 de mayo de 12 a las 16:05

Nuestro conjunto de caracteres se configuró en latín por error... No hace falta decir que esta tabla es enorme y contiene algunos datos incorrectos. Si cambiamos el conjunto de caracteres durante la noche a UTF8 para la tabla, ¿se reindexará y resolverá el problema? - xXFenomeno22Xx

@xXPhenom22Xx: no, no lo hará. Los valores fuera de rango no se volverán a convertir mágicamente. - quassnoi

Probablemente estés notando algo como esto 'bicho'. Lo más probable es que los 'caracteres incorrectos' sean caracteres de control UTF-8 (por ejemplo, \x80). Es posible que pueda identificarlos mediante una consulta como

SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0

De ese error vinculado, recomiendan usar type BLOB para almacenar texto de archivos de Windows:

Use BLOB (con campo de codificación adicional) en lugar de TEXTO si necesita almacenar archivos de Windows (incluso archivos de texto). Mejor que UTF-3 de 8 bytes y sobrecarga de codificación de varios niveles.

Echa un vistazo a esta Q / A (se trata de la codificación de su cliente, también conocida como SET NAMES )

Respondido 13 Abr '17, 13:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.