English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Wir wissen, dass MySQL die SQL SELECT-Anweisung und den WHERE-Clausel verwendet, um Daten in der Datenbanktabelle zu lesen, aber wenn das angegebene Suchkriteriumsfeld NULL ist, kann diese Anweisung möglicherweise nicht ordnungsgemäß funktionieren.
Um dieses Szenario zu behandeln, bietet MySQL drei Hauptoperators an:
IS NULL: Wenn der Wert der Spalte NULL ist, gibt dieser Operator true zurück.
IS NOT NULL: Wenn der Wert der Spalte nicht NULL ist, gibt der Operator true zurück.
<=>: Der Vergleichsoperator (unterschiedlich vom =-Operator) gibt true zurück, wenn die beiden Werte gleich sind oder beide NULL sind.
Die Vergleichsoperationen für NULL sind besonders. Man kann NULL nicht mit = NULL oder != NULL in einer Spalte suchen, um NULL-Werte zu finden.
In MySQL wird der Vergleich von NULL-Werten mit jedem anderen Wert (sogar NULL) immer NULL zurückgeben, d.h. NULL = NULL gibt NULL zurück.
In MySQL wird mit IS NULL und IS NOT NULL-Operatoren mit NULL umgegangen.
Hinweis:
select * , columnName1+ifnull(columnName2,0) FROM tableName;columnName1,columnName2 int-Typ ist, wenn columnName2 wenn columnName1+columnName2=null, ifnull(columnName2,0) columnName2 in null-Werte umgewandelt werden.
In den folgenden Beispielen wird angenommen, dass die Datenbank w3Tabelle w im codebox3codebox_test_tbl enthält zwei Spalten w3codebox_author und w3codebox_count, w3NULL-Werte in codebox_count einstellen.
Versuchen Sie den folgenden Beispiel:
root@host# mysql -u root -p password; Passwort eingeben:******* mysql> use w3codebox; Datenbank geändert mysql> create table w3codebox_test_tbl -> ( -> w3codebox_author varchar(40) NICHT NULL, -> w3codebox_count INT -> ); Abfrage OK, 0 Zeilen betroffen (0,05 sec) mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author,3codebox_count) Werte ('w3codebox', 20); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author,3codebox_count) Werte ('基础教程网', NULL); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author,3codebox_count) Werte ('Google', NULL); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author,3codebox_count) Werte ('FK', 20); mysql> SELECT * from w3codebox_test_tbl; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | w3codebox | 20 | | 基础教程网 | NULL | | Google | NULL | | FK | 20 | +---------------+--------------+ 4 rows in set (0.01 sec)
In den folgenden Beispielen können Sie sehen, dass die = und !=-Operatoren nicht funktionieren:
mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count = NULL; Leere Menge (0,00 sec) mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count != NULL; Empty set (0.01 sec)
查找数据表中 w3codebox_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下示例:
mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count IS NULL; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | 基础教程网 | NULL | | Google | NULL | +---------------+--------------+ 2 rows in set (0.01 sec) mysql> SELECT * from w3codebox_test_tbl WHERE w3codebox_count IS NOT NULL; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | w3codebox | 20 | | FK | 20 | +---------------+--------------+ 2 rows in set (0.01 sec)
PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。
以下示例中 PHP 设置了 $w3codebox_count 变量,然后使用该变量与数据表中的 w3codebox_count 字段进行比较:
<?php $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8; if(isset($w3codebox_count)) { $sql = "SELECT3codebox_author,3codebox_count FROM3codebox_test_tbl WHERE w}}3codebox_count = $w3codebox_count"; } else { $sql = "SELECT3codebox_author,3codebox_count FROM3codebox_test_tbl WHERE w}}3codebox_count IS NULL"; } mysqli_select_db( $conn, 'w3codebox' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('Daten können nicht gelesen werden: ' . mysqli_error($conn)); } echo '<h2>Grund教程(oldtoolbag.com) IS NULL Test<h2">;</ echo '<table border="1><tr><td>Author</td><td>Einloggingsitzungen</td></tr>'; while($row = mysqli_fetch_array($retval)) { echo "<tr>". "<td>{$row['w3codebox_author']} </td> ". "<td>{$row['w3codebox_count'} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>
Die Ausgabe ist wie folgt dargestellt: