Я читал эту статью на BBC. В ней рассказывается о человеке по имени Дженифер Налл и о том, как она сталкивается с повседневными проблемами при использовании онлайн-баз данных, таких как бронирование авиабилетов, интернет-банкинг и т.д.
Я не очень хорошо разбираюсь в базах данных, и я не очень часто этим пользуюсь. Когда я создавал веб-сайт для обучения, при проверке формы на стороне сервера использовались регулярные выражения. Из того, что я помню, она с радостью приняла бы название «Нуль». Я не пробовал это все же.
Может ли кто-нибудь объяснить технические детали, когда возникнет такая ситуация? Проверка формы просто делает string == NULL
или что-то? Даже так я не думаю NULL is same as "NULL"
.
null
database-agnostic
Сурадип Нанда
источник
источник
Ответы:
Я видел интерфейсы базы данных (например, библиотеки фреймворков), которые возвращают 'null' как строку для нулевых столбцов. Я полагаю, что был флаг, который включал бы или выключал это для отладки. Этот флаг позволяет разработчикам легко определить, было ли пустое поле результатом нулевого или пустого значения. Это плохая настройка, особенно на производстве, которая объясняет проблемы, описанные в статье.
Обратная обработка преобразования 'null' в нулевое значение должна генерировать ошибку приложения для поля имени. Я ожидаю, что это будет довольно быстро решено.
источник
Есть хороший шанс, что большая часть вашего замешательства проистекает из журналистской. В статье рассказывается о проблемах использования целых прикладных систем, а не только баз данных. Абсолютно разумно, поскольку эта статья предназначена для массового потребления, но технические детали скрыты или неправильно поняты автором.
Вероятно, некоторые из этих проблем вызваны на уровне приложений, а не API БД. Магические ценности - это антишаблон, который нелепо вытеснить из индустрии. Очень легко какой-то программист мог бы написать условие по типу «кто-то набрал« ноль »? Они должны означать, что нет значения, потому что это то, что означает нуль!» Неправильная попытка предотвратить внедрение SQL-кода также может быть причиной упомянутого неправильного обращения с Null или гавайской фамилией, содержащей одинарную кавычку, которая также является стандартным разделителем строк SQL.
Приложение, которое неправильно преобразует эти значения в NULL или пустую строку, может легко создавать ошибки, если бизнес-логика или ограничения БД ожидают чего-то другого. Это естественно приводит к разочаровывающему опыту пользователя, описанному в статье.
источник
Сама статья содержит ссылку на вопрос переполнения стека, который демонстрирует проблему; это было в приложении Flex, где код:
добавит элемент, содержащий слово,
Fred
в документ XML, но код:добавит пустой элемент, а не элемент, содержащий текст «null».
По сути, у XML нет проблемы с текстовым значением «NULL», поэтому включение такого текста не составит проблемы. На самом деле,
NULL
никакого особого значения в XML нет.источник
Я не упомянул одну вещь, о которой упомянул: мы говорим не только о SQL.
Имя может начинаться / заканчиваться в базе данных ... но для этого обычно используются НЕСКОЛЬКО каналов. База данных, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch и т. Д. И т. Д. И т. Д. И т. Д.
Каждый из этих шагов в конвейере может включать преобразование данных из одного формата в другой. Из таблиц Sql, JSON, XML, CSV и т. Д ...
В любой точке этой сложной цепочки потребуется только одно пятно плохого программирования или нечеткого языка программирования ( например, обработка нулевого JavaScript ) ...
Так что не ограничивайте себя проблемой в базе данных ... потому что она может быть где угодно в "стеке".
источник
Сообщество Wiki ответит на различные ссылки, изначально оставленные в качестве комментариев к этому популярному вопросу
Как фамилия Null вызывает проблемы во многих базах данных? (Программисты SE)
Программисты лжи верят в имена Патрика МакКензи
Лицензировано для Билла Дэвидом Миккельсоном (snopes.com)
Пример кодирования, который вызовет эту проблему на прикладном уровне.
Подвиги мамы - Таблицы Маленького Бобби (xkcd webcomic)
источник
Реляционные базы данных должны учитывать отсутствующие или нерелевантные значения. Например, список клиентов может включать номер мобильного телефона или пол. Что, если корпорация хочет стать клиентом - какого пола она должна иметь?
Специальный индикатор используется, чтобы показать, что значение отсутствует. Этот специальный флаг имеет значение NULL. Таким образом, неаккуратное программирование может привести к тому, что индикатор отсутствующего значения - NULL - будет перепутан с фамилией Дженнифер Налл, возможно, интерпретируя ее фамилию как пропущенные данные, а не фактическое значение.
Это немного похоже на открытие банковского счета, но не внесение денег. Баланс равен нулю. Это не значит, что у вас нет баланса. Это означает, что у вас есть баланс, и его значение равно «0». Но неаккуратное программирование может неверно истолковать ноль как «не существует» и определить, что у вас вообще нет учетной записи.
источник
Есть много плохо написанного программного обеспечения и даже фреймворков, которые странно ведут себя с кем-то по имени Null.
Но давайте не будем забывать человеческий фактор: возможно, люди видят имя на экранах и распечатках и думают, что это ошибка, а удаление человека - еще одна вероятная причина?
источник