2012-02-05 3 views
8

私は、過去10年間にわたって、毎週のデータセットで構成されるMySQL DBを作成しています。最近のレコードには存在するが、一部の古いデータセットでは追跡されなかったデータポイントがいくつかあります。問題のフィールドはすべて整数値を含み、 '0'はデータポイントを追跡したレコードの完全に有効な(頻繁な)値です。私はゼロと存在しないデータの値を区別できる必要があります。したがって、INT型に '0'(read:BLANK CELL)と表されていないNULLを格納することが可能かどうかを調べる必要があります。しかし、DBに渡されるNULL値は「0」(少なくともphpMyAdminにあります)で表されますが、これを変更する方法はありますか?MySQLのINT型を0以外の値にすることができます

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

+0

私はあなたがNULL値を含むことを許可するべきだと思います。しかし、簡単な答えは:はい、int列はNULL値を持つことができます。 –

答えて

11

NULLに設定できます。 INSERT INTO table (INT_COLUMN) VALUES (NULL)は有効なSQLです(INT_COLUMNはNULL可能なint列です)。

+0

Iveは空白とNULLの両方として値を渡そうとしましたが、どちらの状況でも(少なくともPHPMyAdminをブラウズするときは) "0"と表示されます... – dgeare

+0

カラムのデフォルト値を0に設定しましたか?ここにテーブル定義を貼り付けます。 –

+0

「nullable」の定義を追加して回答を改善してください –

2

はい、問題の列にNULL値を許可するようにテーブルが設計されていることを確認してください。選択

DROP TABLE IF EXISTS testTable; 
CREATE TABLE `testTable` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `data` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
; 

INSERT INTO testTable VALUES 
(NULL, 100), 
(NULL, 200), 
(NULL, NULL), 
(NULL, 400); 

SELECT * FROM testTable; 

次のような結果になります:以下の非常に基本的な例を参照してください

+----+------+ 
| id | data | 
+----+------+ 
| 1 | 100 | 
| 2 | 200 | 
| 3 | NULL | 
| 4 | 400 | 
+----+------+ 
+0

ここにある他のコメントによれば、「show create table 」の出力を表示できれば、問題がテーブル定義であるかどうかを確認できます。 – StudyOfCrying

8

の答えは「イエス」である - あなたはNULL可能int型の列を持つことができます。しかし、あなたはすべきですか?

あまりにも多くの場合、nullが誤用され、誤解されます。 SQLデータベースのnullは "不明"を意味します。あなたの状況では、nullを使用すると完璧なので、 "はい - する必要があります"

"ヌル"に特定の値を使用する場合があります。例えば、数量の場合は-1です。どれリスト

    • あなたは特別な構文を使用する必要があり、「NULL IS」:このアプローチは有効であり、アプリケーション・コードとSQ​​Lを簡略化するために使用され、クエリの中でヌルに対処することはお尻の痛みであるため、選択された値のいずれかがnullの場合はnullを含有する、例えばWHERE NAME IN (SELECT COL1 FROM SOMETABLE)は動作しないだろうと一致することはありません
    • ヌル行い、厳格な(例えばJava)のアプリのコードでは、他の等しくないもの、でも別のヌル
    • 、あなた値がnullであることを確認するか、NullPointerExceptionが発生します。実際の値を使用するとこれを回避できます。
  • +6

    「マジック」の値を使うのは良いこともありますが、お尻の痛みでもあります。通常の 'SUM()'や 'AVG()'は '-1'という値があると間違った結果を返します。 –

    2

    実際に何が尋ねられたのかを実際に読まずに質問に答える方法を驚かせることは決してありません。私はphpMyAdminで同じことを見ています。 Allow nullが選択されていて、レコードを更新していない、 "IS NULL"または ""またはnullが機能しません。列のINT値は何かによって強制されています....誰かがJavascriptを言っている場合、アンダースコア、JQuery、または他のJavascript拡張を使用して回答をしたくない場合、そのような回答は自動-10のプロファイルにする必要があります!!!

    +1

    それで、phpMyAdminが私が経験していた問題だったようです。 mysql CLIではINTカラム値をNULLに設定できましたが、phpMyAdminでは設定できませんでした。 – Quadrivium