Estaba leyendo este artículo en la BBC. Cuenta la historia de una persona llamada Jenifer Null y cómo se enfrenta a problemas cotidianos mientras usa bases de datos en línea como reservar boletos de avión, banca en línea, etc.
No conozco bien las bases de datos y no lo uso con mucha frecuencia. Cuando hice un sitio web para aprender, la validación de formularios del lado del servidor usaba expresiones regulares. Por lo que recuerdo, aceptaría felizmente el nombre "Nulo". Aunque no lo he probado.
¿Alguien podría explicar los tecnicismos cuando ocurriría esta situación? ¿La validación del formulario solo está haciendo string == NULL
algo o algo? Aun así no lo pienso NULL is same as "NULL"
.
null
database-agnostic
Souradeep Nanda
fuente
fuente
Respuestas:
He visto interfaces de bases de datos (por ejemplo, bibliotecas de framework) que devuelven 'nulo' como una cadena para columnas nulas. Creo que había una bandera que activaría o desactivaría esto para la depuración. Este indicador permite a los desarrolladores determinar fácilmente si el campo vacío fue el resultado de un valor nulo o un valor vacío. Esta es una mala configuración, especialmente en producción, y explicaría los problemas explicados en el artículo.
El procesamiento inverso de convertir 'nulo' a un valor nulo debería generar un error de aplicación para un campo de nombre. Esperaría que esto se resuelva bastante rápido.
fuente
Hay una buena posibilidad de que una buena parte de tu confusión provenga de la del periodista. El artículo habla sobre problemas al usar sistemas de aplicaciones completos, no solo bases de datos. Completamente razonable ya que este es un escrito dirigido al consumo masivo, pero los detalles técnicos son pasados por alto o mal interpretados por el autor.
Es probable que algunos de estos problemas se causen en la capa de aplicación, en lugar de en la API de la base de datos. Los valores mágicos son un antipatrón que es ridículamente difícil de eliminar de la industria. Muy fácilmente, algún programador podría haber escrito una condición similar a "¿alguien escribió 'nulo'? ¡Deben significar que no hay valor, porque eso es lo que significa nulo!" Un intento equivocado de prevenir la inyección de SQL también podría ser responsable del maltrato mencionado de Null, o el apellido hawaiano que contiene una comilla simple, que también es el delimitador de cadena SQL estándar.
Una aplicación que transforma incorrectamente estos valores en NULL o una cadena vacía puede crear errores fácilmente si la lógica de negocios o las restricciones de la base de datos esperan algo diferente. Naturalmente, esto resulta exactamente en la frustrante experiencia del usuario descrita en el artículo.
fuente
El artículo en sí incluye un enlace a una pregunta de desbordamiento de pila que demuestra el problema; estaba en una aplicación Flex donde el código:
agregaría un elemento que contiene la palabra
Fred
a un documento XML pero el código:agregaría un elemento vacío, no un elemento que contenga el texto "nulo".
XML, per se, no tiene un problema con el valor de texto "NULL", por lo que incluir dicho texto no sería un problema. De hecho,
NULL
no tiene ningún significado especial en XML.fuente
Una cosa que no creo haber visto mencionada: no solo estamos hablando de SQL.
El nombre puede comenzar / finalizar en la base de datos ... pero llegar allí normalmente involucra MÚLTIPLES canales. Base de datos, SQL, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch, etc., etc., etc.
Cada uno de estos pasos en la tubería podría implicar la conversión de datos de un formato a otro. Desde tablas SQL, a json, a xml, a CSV, etc.
En cualquier punto de esta cadena complicada, solo tomará un lugar de mala programación o un lenguaje de programación difuso ( manejo nulo de JavaScript, por ejemplo) ...
Así que no se limite al problema de estar en la base de datos ... porque puede estar en cualquier parte de la "pila".
fuente
Community Wiki responde por los diversos enlaces que originalmente se dejaron como comentarios sobre esta pregunta popular
¿Cómo un apellido de nulo causa problemas en muchas bases de datos? (Programadores SE)
Los programadores de falsedades creen en los nombres de Patrick McKenzie
Con licencia para Bill por David Mikkelson (snopes.com)
Un ejemplo de codificación que causará este problema en la capa de aplicación.
Exploits of a Mom - también conocido como Little Bobby Tables (xkcd webcomic)
fuente
Las bases de datos relacionales tienen que acomodar valores perdidos o irrelevantes. Por ejemplo, la lista de clientes puede incluir un número de teléfono móvil o un género. ¿Qué pasa si una corporación quiere convertirse en cliente? ¿Qué género debería tener?
Se utiliza un indicador especial para mostrar que falta un valor. Esta bandera especial es NULL. Por lo tanto, la programación descuidada puede hacer que el indicador de valor faltante, NULL, se confunda con el apellido de Jennifer Null, tal vez interpretando su apellido como datos faltantes en lugar de un valor real.
Es un poco como abrir una cuenta bancaria pero no depositar dinero. El saldo es cero. Esto no significa que no tengas equilibrio. Significa que tiene un saldo y su valor es "0". Pero la programación descuidada podría malinterpretar el cero como un "no existe" y determinar que no tiene una cuenta en absoluto.
fuente
Hay un montón de software mal escrito, e incluso marcos, que se comportarían de manera extraña con alguien llamado Null.
Pero no olvidemos el elemento humano: ¿quizás los humanos vean el nombre en pantallas e impresiones y piensen que es un error y eliminar a la persona es otra causa probable?
fuente