2

列を持つテーブル「media_content」を使用しています

id varchar(50) NOT NULL,
shorttitle varchar(200) DEFAULT NULL,
sourceimage blob

後で、sourceimage列をデフォルト値に変更しました。NULL

ALTER TABLE media_content
MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT NULL;

sourceimage今、私は列をデフォルトにしたいと思いますNONE、それを行うことは可能ですか?

4

3 に答える 3

4

(文字列型の列の)デフォルト値を、などの文字列リテラル定数として指定できますが、'NONE'そのような値は実際にはNULL(値がまったくないことを示す)とは非常に異なる意味を持つことに注意してください。

値の操作NULL文書化されているように:

NULLあなたがそれに慣れるまで、その価値は驚くべきものかもしれません。概念的にNULLは、「欠落している未知の値」を意味し、他の値とは多少異なる方法で処理されます。

[ deletia ]

で作業するときの一般的なエラーNULLは、として定義された列にゼロまたは空の文字列を挿入できないと想定することですが、そうでNOT NULLはありません。これらは実際には値ですが、NULL「値がない」ことを意味します。</ p>

NULL他の方法でユーザーに値を提示したいだけの場合は、アプリケーションのプレゼンテーション層でそれを処理する必要があります。

于 2012-10-18T07:47:02.213 に答える
3

同じ構文を使用して、デフォルト値を次のようALTERに変更できます。NONE

ALTER TABLE media_content
MODIFY COLUMN sourceimage VARCHAR(250) DEFAULT 'NONE';
于 2012-10-18T07:48:03.627 に答える
1

私にとって、問題(および、とデフォルト値の関係NULL || NOT NULL)は、次のことを考慮するとより明確になります。

NOT NULL必須:デフォルト値が存在する必要があります。そうでない場合、値を指定せずにレコードを挿入することはできません(デフォルト値を指定するか、[なし]を選択します。⇒デフォルトを指定しないでください。これら2つのオプションのどちらかを選択する必要があります。後者このフィールドに値を指定せずに挿入すると、エラーが発生して拒否されることを意味するオプション)。一方:

NULL必須ではありません—フィールドに値が指定されていないか、値が不明であることNULLを示します。(フィールドが「NULL可能」の場合、デフォルト値を指定したくないと言っても意味がありません。null可能性に応じて、このフィールドを指定しなくても挿入が許可されるためです。したがって、フィールドにはデフォルトが必要です。それがデフォルトであるか、特定の値であるかは関係ありません。)NULL

phpMyAdminを使用している場合は、関連するテーブルの[構造]タブにアクセスし、関連する列の定義を見つけて、[変更]を選択する必要があります。[デフォルト]ドロップダウンに、[なし]オプションが表示されます。これを選択して[保存]を押します。これが生成するSQLコマンドに注意すると、次のようになります。

ALTER TABLE  `…_tbl` CHANGE  `…_fld` `…_fld` TEXT NOT NULL;

ただし、ユーザーインターフェイスでデフォルトを「なし」に指定しようとすると、NULLを許可する必要があります。その場合、デフォルトは代わりに「」(空の文字列)または「0000-00-00 00:00:00」(フィールドの場合)などに戻りますDATETIME。したがって、ここで重要なのは、列(フィールド)がNULLABLEかどうかです。か否か!

この「なし」オプションは、基盤となるデータベースで実際に何が起こっているかを表すためにphpMyAdminによって使用される抽象化のアーティファクトである可能性があります(これは何か別のものです)。

フィールドをNOT NULLタイプに変更する前。最初に既存の値を確認し、承認した方法で値が自動的に変更されることを確認します。

言い換えると、 NULL/ NOT NULL、およびデフォルト値。は本質的に相互に関連しています。指定できる値の組み合わせを制限することによってこの関係を有効に表さないユーザーインターフェイスは、人間工学的に不十分です。phpMyAdminやおそらく他のツールは、この点で改善される可能性があります。

于 2016-02-15T18:30:00.497 に答える