Kategorie
MySQL

MySQL error 1364 Field doesn’t have a default values

Od  wersji 5.7 serwera MySQL parametr strict mode jest domyślnie ustawiony w jego konfiguracji po instalacji serwera. W konsekwencji tego, jeśli pola nie mają ustawionej domyślnej wartości, występuje błąd zapisu danych do bazy.

Mamy dwa wyjścia: możemy zaktualizować aplikację i ustawić dla wszystkich pól w bazie danych domyślne wartości, albo zmienić konfigurację serwera.

Wybierając drugie rozwiązanie edytujemy plik /etc/mysql/mysql.conf.d/mysqld.cnf

root@server:/# vim /etc/mysql/mysql.conf.d/mysqld.cnf

Odszukujemy sekcję [mysqld], która domyślnie powinna mieć ustawione poniższe wartości:

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

i usuwamy z parametrów wartość STRICT_TRANS_TABLES, jak poniżej:

[mysqld]
sql_mode = "ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

W przypadku dalszych problemów z działaniem naszych aplikacji, problemem mogą być jeszcze 3 parametry: ONLY_FULL_GROUP_BY, NO_ZERO_IN_DATE, NO_ZERO_DATE.

Postępujemy jak poprzednio i usuwamy problematyczne parametry pracy serwera:

[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Jeśli z pliku /etc/mysql/my.cnf nie mamy sekcji [mysqld] lub w tej sekcji nie ma parametru sql_mode dopisujemy ją razem z odpowiednimi parametrami lub sam parametr.

Na zakończenie restartujemy serwer MySQL.

root@server:/# systemctl restart mysql

Po restarcie możemy sprawdzić czy zmienione zostały parametry pracy serwera. W poniższym poleceniu zamiast „user” i „password” wstawiamy oczywiście dane użytkownika, który ma prawa do logowania do serwera MySQL.

root@server:/#  mysql -u user -ppassword -e "select @@sql_mode"

powinniśmy otrzymać podobny wynik:

+-----------------------------------------------------------------------+
| @@sql_mode                                                            |
+-----------------------------------------------------------------------+
| ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+