Как передать NULL тип данных? - PullRequest
3 голосов
/ 26 июня 2009

Что такое тип данных для NULL при передаче этого значения без данных в базу данных?

Ответы [ 13 ]

6 голосов
/ 26 июня 2009

Существует NO тип данных NULL. NULL сам по себе означает ОТСУТСТВИЕ данных. Когда нет данных, как они могут иметь тип?

3 голосов
/ 26 июня 2009

Ноль не имеет определенного типа данных в SQL. Любой обнуляемый столбец или переменная может содержать ноль. Нуль никогда не равен или не равен чему-либо. Вы можете привести переменную, содержащую ноль, к другой переменной и получить ноль, например:

declare @a integer
set @a = null
select convert (float, @a)

----------------------
NULL

(1 row(s) affected)
1 голос
/ 14 июля 2011

В SQL NULL - это «отметка» (что-то отличное от значения), которая может применяться к любому типу SQL. Так что это ортогонально набирать.

1 голос
/ 26 июня 2009

Тип данных для NULL не имеет смысла, как тип данных для 0: это может быть INTEGER, FLOAT или VARCHAR. Вы не можете сказать это только по значению.

NULL является допустимым значением почти в каждой области типов данных, что означает отсутствие фактического значения.

Также бессмысленно обсуждать типы данных вне контекста некоторых RDBMS.

В SQLite, например, типы данных привязаны к значениям, а не к столбцам, а NULL является типом данных первого класса как таковым.

В Oracle типы данных определены более строго. Например, этот запрос работает:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS DATE) i
        FROM    dual
        ) q

и это не так:

SELECT  COALESCE(dt, i)
FROM    (
        SELECT  CAST(NULL AS DATE) AS dt, CAST(NULL AS NUMBER) i
        FROM    dual
        ) q

, поскольку последний запрос возвращает два столбца разных типов данных, каждый из которых имеет значения NULL, а COALESCE требует, чтобы оба аргумента имели одинаковый тип данных.

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

Например, VARCHAR может быть неявно преобразовано в INTEGER, если оно имеет значение 0, но не может, если оно имеет значение 'some_string'.

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

1 голос
/ 26 июня 2009

Обычно NULL - это собственный тип данных - тип 1 - "INTEGER", тип типа NULL - "NULL"

0 голосов
/ 22 июля 2016

Прабхахар, каждый тип драйвера базы данных имеет свой собственный способ обработки NULL. Вам придется проверить API драйвера для конкретной базы данных.

Например, если вы используете базу данных Java Derby, просто передайте собственный Java-тип null, как показано в Ответ Яна Бьорховде на «Обработка значений NULL в Derby» :

insert into T_AUTHOR (
  ID, FIRST_NAME, LAST_NAME, 
  DATE_OF_BIRTH, YEAR_OF_BIRTH, ADDRESS) 
VALUES ( 
  1000, 'Lukas', 'Eder', 
  '1981-07-10', null, null 
);

Вот еще один null пример JDBC: вставка нуля в столбец целых чисел :

pst.setNull(4, java.sql.Types.INTEGER);
0 голосов
/ 31 августа 2013

Обычно SQL NULL не имеет типа, связанного с ним. Однако есть исключения. Механизмы баз данных postgresql и derby (javadb) требуют, чтобы тип null имел тип. Другими словами, они не поддерживают нетипизированный нуль. Таким образом, условия запроса, такие как NULL IS NULL, могут не выполняться. Здесь NULL должен быть указан тип, ожидаемый тип цели, которая обрабатывает значение NULL. В этом случае это кажется глупым, потому что нет цели, и это может быть контрпродуктивно.

См. Функция CAST: - вы должны привести NULL в качестве типа данных, чтобы использовать его

См. Запросы с защищенным нулевым параметром Ошибка параметра и Добавление поддержки для setObject (arg, null)

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

0 голосов
/ 21 августа 2009

На самом деле, в PowerShell при сравнении $ null -eq $ null выдает False. Кроме того, -not $ null даст вам True, поэтому здесь он представляется как False. Я знаю, что PowerShell не может быть хорошим примером, но все же:)

0 голосов
/ 26 июня 2009

NULL можно привести (преобразовать) к любому типу данных, но сравнение типов данных с NULL всегда возвращает FALSE.

0 голосов
/ 26 июня 2009

Я думаю, что вопрос побеждает сам. Если бы у NULL был тип данных, вы не будете вынуждены изменять его при каждом создании экземпляра вне его значения по умолчанию. Например, когда вы создаете его как символ, но затем вводите его в значение объекта?

NULL==NULL

Это все.

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