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
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 yFALSE
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;