2011-12-19 16 views
12

私はこれがばかな質問ではないことを願っています。すべての変数にデフォルト値を設定することも、変数を挿入するための関数を設定することもできます。フィールドを挿入する必要がなく、null値を許可しない場合は、phpMyAdminに表示される「空白」の値は何ですか?クエリで空の文字列などとして返されますか?デフォルト値が指定されていない場合、フィールドのデフォルト値は何ですか?

ただそれを理解しようとしていますが、そのレコードの特定の列の値が "空"でないか、空白であるなど、すべてのレコードを照会します。

ありがとうございました。

答えて

22

は、 、

明示的なDEFAULTを持たないNOT NULL列のデータ入力の場合 句、INSERTまたはステートメントをREPLACEが カラムに値が含まれていない、またはUPDATEステートメントがNULLの列を設定し、MySQLは時点で有効なSQLモードに従って 列を処理する場合:

  • 厳しい場合SQLモードが有効になっていない場合、MySQLは列を列データ型の暗黙の既定値に設定します。
  • 厳密モードが有効な場合、トランザクションテーブルでエラーが発生し、その文がロールバックされます。非トランザクションテーブルの場合は、
    のエラーが発生しますが、これが複数行の文の の2行目以降に発生した場合、前の行が挿入されます。

これで、さまざまな列データ型の暗黙的な既定値はどうなりますか?ここに行く:次のように

暗黙のデフォルトが定義されています。

  • 数値型の場合、デフォルトでは、整数または浮動小数点タイプのためにAUTO_INCREMENT
    属性で宣言することを除いて、0であります、デフォルトはシーケンス内の次の値です。
  • TIMESTAMP以外の日付と時刻のタイプの場合、デフォルトはタイプの適切な「ゼロ」値です。表の最初のTIMESTAMP列 の場合、デフォルト値は現在の日付と時刻です。第10.3項「日付と時刻のタイプ」を参照してください。
  • ENUM以外の文字列型の場合、デフォルト値は空の文字列です。 ENUMの場合、デフォルトは最初の列挙値です。
0

指定しない限り(つまり、問題の列に「デフォルト制約」を定義しない限り)デフォルト値はありません。

ここでは、既存の列にデフォルト値を追加するための例です:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

ここでは、デフォルトでテーブルを作成する例を示します

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

それがnullではない」すべての列を宣言するとよいでしょう必要に応じてデフォルトの制約を提供します。

上記の「books」の例では、PubIDを指定せずに「挿入」すると、PubIDはゼロになります。

IDまたは名前を指定せずに「挿入」すると、エラーが発生します。

あなたは、自動割り当てIDにMySQLをしたい場合は、代わりにこの構文を使用します。

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 
-1

をあなたがnullを許可しない場合: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

上記のクエリがnull禁止して割り当てられます値が指定されていない場合は空文字列。
phpmysqladminでは、blank = emptyです。
経由でPHP mysqli functionまたはmysql function,null value is returned as null

クエリを適用したら、あなたは簡単にあなたが、これは前にALTERを実行しないため

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

を使用することによりただし、最良であることをフィルタリングすることができます: -

manualを参照
update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

これは賢明ではありません。 'NULL'は値の不足(未知数)を意味し、**空の値と同じではありません**。 –

関連する問題