Что значит иметь действительную запись, когда запись не содержит ничего, даже одного пробела - PullRequest
0 голосов
/ 31 мая 2019

Я просматривал данные для определенного столбца, который выглядел так, как будто в нем были пробелы, потому что в нем не было сказано null

При попытке найти, что это было, я обнаружил, что в данных нет ни одного пробела.но это также не пусто.

Что это тогда?- что-то между двумя одинарными кавычками, которые не являются пробелами.

Попытка выполнить этот запрос без результатов:

select column1 from table1 where column1 like '% %' 
-- Single space

-> No records found

во втором запросе, который я пробовал (см. ниже), пробелы не упоминаются.И это дало результат, сказав, что существуют записи, которые похожи на -> ''

select column1 from table1 where column1 like '% %'

select column1 from table1 where column1= ''

Я пытаюсь понять, что это за запись и что значит быть ничем?

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Что это тогда? - что-то между двумя одинарными кавычками, которое не является пробелом.

Это строка нулевой длины. Вы правы, это не пробел - пробел ' ' - он имеет длину одного символа. Строка длиной 0 не похожа на строку длины 1, независимо от того, какой символ находится в строке.

В любой компьютерной системе мы произвольно выбираем смысл всего. Предположим, у вас есть вопрос с ответом A, B или C. У вас также могут быть ситуации, когда человек не знает, или знает, но не хочет говорить. Вы можете произвольно решить, что NULL означает «не знаю» и строку длиной 0 как «не хочу говорить» в дополнение ко всем людям, которые ответят письмом

Это произвольное решение, может быть, вы решите сохранить место для "не хочу говорить", может быть, восклицательный знак - что угодно. Некоторые поставщики баз данных считают важным обеспечить поддержку наличия строк нулевой длины, другие (oracle) этого не делают (oracle рассматривает null и '' как одно и то же)

В конечном итоге, если ваш БД поддерживает строки нулевой длины, вы должны понимать, что они собой представляют, и в контексте вашего приложения вы должны понимать, что они означают. То, что они есть, похоже на стакан без воды или пакет конфет без конфет. Утверждение «нет данных» отличается от «мы не знаем, есть ли данные или нет». «- неопределенность здесь чаще связана с NULL

Я пытаюсь понять, что это за запись и что значит быть ничем?

Эта запись является записью со строкой нулевой длины в этом столбце. Однако мы не можем сказать вам, что это значит, потому что решение о сохранении строки нулевой длины было принято вами или одним из других разработчиков в вашей компании или предыдущим разработчиком, который ушел. Возможно, он хотел записать разницу между нулевыми и нулевыми данными. Возможно, он не удосужился проверить, не были ли данные нулевыми, и хотел избежать типичного сбоя нулевой ссылки во внешнем приложении. Возможно, он хотел посчитать данные, хотя там не было данных, которые можно было бы поместить

Мы не можем ответить на эту часть вашего вопроса

Мы можем только сказать вам, что строки нулевой длины возможны, вы можете придать им столько же значений, сколько и любой другой строке, и они никогда не будут равны строке ненулевой длины, поэтому like '% %' никогда их не найдет. Не думайте, что то, что вы не видите, должно быть пробелом.

0 голосов
/ 31 мая 2019

Обнуляемые текстовые поля могут быть либо NULL, либо строкой длины 0, т.е. '', либо непустой строкой, например. 'abc'

'' не совпадает с NULL.

В моем курсе по базам данных меня учили, что NULL означает, что значение неизвестно, а значение identity , такое как пустая строка, будет означать, что мы знаем значение, и оно ничто, но часто разработчики и приложения не уважают это различие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...