私は、 "オフセット"という名前のENUMフィールドと他のいくつかの列を持つMYSQLテーブルを持っています。フィールドは以下のように定義される:ENUM( "0"、 "1")がMysqlに空の文字列として保存されるのはなぜですか?
ENUM(0,1)、今は2つのサーバーを持っているNULL、所定値NULL
することができます。プロダクションサーバーと開発サーバー、およびデータベースの作成と更新に使用された同じPHPスクリプト。
まずステップ:アプリケーションがCREATEクエリで "はオフセット" を渡しwitoutレコードを作成します。
第2ステップ:アプリケーションはユーザーに何らかのデータ(オフセット値ではない)を要求し、ステップ1で挿入された行を読み取り、配列を作成し、一部のフィールドを更新します(オフセットフィールドではありません)。自動化された方法でクエリを作成し、更新された値で行を再度保存します。
自動クエリービルダーは、配列に渡されたすべてのフィールドを読み取り、UPDATE文字列を作成します。私はこの配列を取得し、両方のシステムで
:
$values = array(... 'offset' => null);
とmysql_real_escape_stringの中で値を渡すこの同じクエリに変換します
UPDATE MyTable SET values..., `offset` = '' WHERE id = '10';
は今問題があります。運用システムでクエリを起動すると、行が保存されます。開発システムにエラーがあり、dbには行を保存せずにオフセットデータが間違っていると表示されます。
phpmyadminから、最初の手順で行を作成すると、オフセットフィールドにNULLが表示されます。エラーを出さないシステムにフィールドを保存すると、空の文字列が表示されます。
どちらのシステムもMySQL 5を使用していますが、Linuxでは5.0.51、Windowsでは5.0.37を使用しています。
質問:
一つのシステムは私にエラーANフィールドを保存し、他のものを与えるのはなぜ?構成の違いはありますか?
列挙型 "0"または "1"のフィールドを保存すると、なぜNULLが保存されるのでしょうか?
+1これは正確に私が "環境"の違いを解決し、間違って生成されたクエリを回避した後に尋ねるヌル値をエスケープするという副問題の答えです – yuri