У меня есть таблица MYSQL с полем ENUM с именем " offset " и некоторыми другими столбцами.Поле определяется как:
ENUM (0,1) , может быть NULL , предопределенное значение NULL
Теперь у меня два сервера.Рабочий сервер и сервер разработки, а также тот же сценарий PHP, который использовался для создания и обновления базы данных.
Первый шаг : приложение создает запись без пропуска " offset"в запросе CREATE.
Второй шаг : приложение запрашивает у пользователя некоторые данные (не значение «смещения»), читает строку, вставленную на первом шаге, и создает массив, обновляет некоторое поле (неполе «смещение»), создайте запрос в автоматическом режиме и снова сохраните строку с обновленными значениями.
Автоматизированный построитель запросов просто считывает все поля, переданные в массиве, и создает строку UPDATE.
В обеих системах я получаю этот массив:
$values = array(... 'offset' => null);
и преобразую его в этот же запрос, передавая значения в mysql_real_escape_string:
UPDATE MyTable SET values..., `offset` = '' WHERE id = '10';
Теперь существует проблема.Когда я запускаю запрос в производственной системе, строка сохраняется, в системе разработки я получаю сообщение об ошибке, и дБ говорит, что данные о смещении неверны без сохранения строки.
Из phpmyadmin при созданиистрока с первым шагом, показывает NULL в поле смещения.После сохранения поля в системе, которое не выдает ошибок, отображается пустая строка.
Обе системы используют MySQL 5, но в Linux используется версия 5.0.51, а в Windows - 5.0.37 для разработки.
Вопросы:
Почему одна система выдает ошибку, а другая сохраняет поле?Разница в конфигурации?
Почему, когда я сохраняю поле с перечислением "0" или "1", оно сохраняет "", а не NULL?