Caracteres NUL en cadenas SQLite: causas y soluciones

Fuentes: Null Characters In SQLite Strings

SQLite admite caracteres NUL (0x00) en mitad de las cadenas almacenadas, pero su presencia provoca un comportamiento fácil de malinterpretar. La función length() solo cuenta los caracteres anteriores al primer NUL y devuelve la longitud hasta ese punto; lo mismo ocurre con la función quote() y con el comando .dump de la CLI, que trunca la salida en el primer byte NUL y descarta todo lo que viene después en cualquier contexto. Para detectar si una columna contiene NUL incrustados basta con evaluar instr(X, char(0)); un resultado mayor que cero indica la posición del carácter. La sentencia UPDATE con substr() e instr() permite eliminar el NUL y todo el texto posterior de cada fila afectada, lo que resulta útil para limpiar ficheros ya existentes. CAST(b AS BLOB) deja ver la cadena completa en hexadecimal, incluidos los NUL, y sirve para confirmar la longitud real. La documentación oficial desaconseja introducir NUL en cadenas SQL porque su invisibilidad genera resultados inesperados y comparaciones que parecen fallar sin motivo aparente.