es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PLSQL: Encontrar caracteres inválidos en una columna de base de datos (UTF-8)

Tengo una columna de texto en una tabla que necesito validar para reconocer qué registros tienen caracteres no UTF-8.
A continuación se muestra un registro de ejemplo donde hay caracteres no válidos.

texto = ‘PP632485 – Hala A – prace kuchnia Zepelin, wymiana muszli, montaô€„ª tablic i uchwytów na rô€„Šczniki, wymiana zamka systemowego’

Hay más de 3 millones de registros en esta tabla, por lo que necesito validarlos todos de una vez y obtener las filas donde esta columna de texto tiene caracteres no UTF-8.

Intenté lo siguiente:

instr(text, chr(26)) > 0 – no se recuperan registros
texto LIKE ‘%ó%’ (intenté esto para algunos caracteres no válidos que noté) – no se recuperan registros
update

<

table> set text = replace(text, ‘ó’, ‘ó’) – no se ve ningún cambio en el texto.

¿Hay algo más que pueda hacer?
Agradezco su aporte.

Esto es Oracle 11.2

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que ha intentado varios métodos diferentes para validar la columna de texto en su tabla y no ha tenido éxito. Una opción que podría intentar es utilizar la función UTL_I18N.VALID_UTF8. Esta función devolverá TRUE si la cadena es válida UTF-8 y FALSE si no lo es. Podría utilizar esta función para verificar cada registro en la tabla y devolver los que no son válidos UTF-8.

    Por ejemplo, podría utilizar la siguiente consulta para obtener los registros con caracteres UTF-8 no válidos:

    sql
    SELECT *
    FROM <tabla>
    WHERE UTL_I18N.VALID_UTF8(text) = FALSE;

Comments are closed.