четверг, 14 декабря 2017 г.

Решение: General error: 1364 Field ‘MyField’ doesn’t have a default value

После обновления MySql до версии 5.5 начали вылетать непонятные ошибки. Например:
Error: SQLSTATE[HY000]: General error: 1364 Field ‘MyField’ doesn’t have a default value
Связано это с тем, что в новой версии базы включен по умолчанию режим STRICT_TRANS_TABLES.
Проверить это можно следующим запросом:
1
SELECT @@GLOBAL.sql_mode
В результате увидите что-то вроде:

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

Вот он тот самый STRICT_TRANS_TABLES.
Данный режим выдает ошибки, когда вы пытаетесь добавить в базу записи, не указывая данные объявленные в таблице по умолчанию.
Для отключения нужно выполнить следующий запрос:

1
SET GLOBAL sql_mode='NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION'
Теперь проверим отключился ли режим:
1
SELECT @@GLOBAL.sql_mode
Увидим что отключен.
Но это не все, после перезагрузки MySql режим снова включится. Для того, что-бы избежать это необходимо удалить этот режим из конфигурационного файла my.ini.
Находим там строчку:
1
sql-mode='бла-бла-бла'

и удаляем из неё STRICT_TRANS_TABLES. Перезагружаем MySql.

понедельник, 6 ноября 2017 г.

Переключение версии PHP в Linux

CLI: Диалог выбора
sudo update-alternatives --config php
sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

и переключаемся с помощью следующих команд для Апача и для командной строки разные php5.6 -> php7.0 :
Apache:
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
CLI:
sudo update-alternatives --set php /usr/bin/php7.0
php7.0 -> php5.6 :
Apache:
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart

CLI:
sudo update-alternatives --set php /usr/bin/php5.6

IT-записки

comments powered by Disqus