MySQL

:: DEVELOPER ZONE

Login / Register

  • MySQL.com
  • Developer Zone
  • Partners
  • Online Shop
  • Downloads
  • Documentation
  • Forums
  • Lists
  • Bugs
  • Events
  • User Groups
  • Guilds
  • Blogs
  • Support
  • Resources
  • Books
  • FAQ

Справочное руководство по MySQL 4.0. :: A Проблемы и распространенные ошибки :: A.5 Проблемы, относящиеся к запросам :: A.5.3 Проблемы со значением NULL

  • Overview
  • MySQL Reference Manual
  • MaxDB Documentation
  • Connectors

Search the MySQL manual:


  • Справочное руководство по MySQL 4.0.

  • A.5 Проблемы, относящиеся к запросам
  • A.5.1 Чувствительность к регистру при поиске
  • A.5.2 Проблемы с использованием столбцов типа DATE
  • A.5.3 Проблемы со значением NULL
  • A.5.4 Проблемы с alias
  • A.5.5 Удаление строк из взаимосвязанных таблиц
  • A.5.6 Решение проблем с отсутствием строк, удовлетворяющих условиям поиска
  • A.5.7 Проблемы со сравнением чисел с плавающей точкой

Get the MySQL Language Reference and MySQL Administrator's Guide from MySQL Press!


Additional languages

  • German


Learn about new MySQL releases, technical articles, events and more.

Subscribe to the monthly MySQL Newsletter!


Previous / Next / Up / Table of Contents

A.5.3. Проблемы со значением NULL

Концепция NULL-значения часто вводит в заблуждение новичков в SQL, которые считают, что NULL - то же, что и пустая строка "". Это ошибка! Например, следующие команды совершенно различны:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");

Обе команды вставляют значение в столбец phone, но первая - значение NULL, а вторая - пустую строку. Смысл первого можно передать как ``номер телефона неизвестен'', смысл второго - ``у нее нет телефона''.

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

mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

Если в столбце нужно найти значения NULL, то нельзя использовать условие =NULL. Следующая команда не возвращает ни одной строки, поскольку для любого выражения expr = NULL ЛОЖНО:

mysql> SELECT * FROM my_table WHERE phone = NULL;

Для поиска значений NULL необходимо использовать проверку IS NULL. Ниже показано, как найти телефонный номер NULL и пустой телефонный номер:

mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";

Заметим, что добавлять индекс по столбцу, в котором допускаются значения NULL, можно только в случае, если вы работаете с версией MySQL 3.23.2 или выше, а используемый тип таблиц - MyISAM или InnoDB. В более ранних версиях или для других типов таблиц необходимо объявлять такие столбцы с атрибутом NOT NULL. Это также подразумевает, что тогда нельзя вставлять NULL в индексированный столбец.

При чтении данных с помощью LOAD DATA INFILE пустые поля обновляются значениями ''. Если необходимо поместить в столбец значение NULL, то в текстовом файле следует использовать \N. Также при некоторых обстоятельствах можно использовать слово-литерал NULL (see Раздел 6.4.9, «Синтаксис оператора LOAD DATA INFILE»).

При использовании ORDER BY значения NULL выдаются первыми. В версиях предшествующих 4.0.2, при сортировке в убывающем порядке при помощи DESC, значения NULL также выдаются последними. При использовании GROUP BY все значения NULL считаются равными.

Для обработки NULL предназначены операторы IS NULL и IS NOT NULL, а также функция IFNULL().

Для некоторых типов столбцов значения NULL обрабатываются специальным образом. Если NULL вставляется в первый в таблице столбец типа TIMESTAMP, то в него помещается значение текущей даты и времени. При вставке NULL в AUTO_INCREMENT-столбец вставляется следующее число последовательности.


This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

Top / Previous / Next / Up / Table of Contents

© 1995-2005 MySQL AB. All rights reserved.

  • About MySQL
  • Careers
  • Site Map
  • Contact Us
  • Legal
  • Privacy Policy
  • Trademark Info
  • No Software Patents!