«Строгий режим (strict mode)” и другие настройки MySQL в Laravel 5.2

от автора

Если вы помните мой пост Как отключить строгий режим MySQL на Laravel Forge (Ubuntu), вы уже знаете, что MySQL 5.7 представил то, что-то обычно называется «строгий режим», который на самом деле является сочетанием новых режимов. В сумме они заставляют MySQL обрабатывать ваши запросы немного более строго, чем раньше.

В той статье я показал, как отключить его на Ubuntu. Но с тех пор, Adam Wathan добавил функционал к Laravel, который позволяет определить, используете ли вы «строгий режим». А также позволяет настроить, какие точно режимы вы хотите использовать — и все это через код.

Если можно изменить конфиг приложения вместо настройки сервера, без ущерба производительности, я всегда выберу этот вариант. Одной проблемой меньше при деплое в новом окружении. Поэтому я необычайно рад этой новой функции.

Стоит отметить, что вы можете использовать эту функцию не только, чтобы отключить строгий режим в 5.7. Можете включить его в 5.6 и это весьма дальновидно. Включить строгий режим на любом приложение, которое работает с 5.6, чтобы впоследствии безболезненно перейти на 5.7. Так вы заранее поймате, все что может упасть.

MySQL 5.7 и «строгий» режим.

Прежде чем говорить о самой фиче, давайте быстро освежим в памяти что означает «строгий режим».

MySQL имеет «режимы», каждый из которых включает или отключает определенное поведение. Например, ERROR_FOR_DIVISION_BY_ZERO это режим, который, как вы уже догадались, выдает ошибку, когда вы делите на ноль в SQL. Если этот режим отключен, вы просто молча получите результат NULL.

«Строгий режим», на самом деле является списком следующих настроек включенных в 5.7 по умолчанию:

ONLY_FULL_GROUP_BY
STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
ERROR_FOR_DIVISION_BY_ZERO
NO_AUTO_CREATE_USER
NO_ENGINE_SUBSTITUTION

Вы можете узнать больше об этих режимах в документации MySQL.

До версии 5.7 единственный режим, который был включен по умолчанию — NO_ENGINE_SUBSTITUTION.

Включение/выключение “строгого” режима в Laravel 5.2

Благодаря этой новой фиче в Laravel теперь можно сделать три вещи: Отключить «строгий режим», возвращаясь к поведению <= 5.6; включить «строгий режим», установив его на поведение 5.7; или настроить точно какие именно режимы включены.

Эти параметры живут в конфигурационном / database.php в connections.mysql разделе. Для начала, давайте посмотрим на включение/выключение «строгого» режима.

'connections' => [         'mysql' => [            // Поведение MySQL 5.6             'strict' => false,             // Поведение  MySQL 5.7             'strict' => true,         ]     ] 

Точная настройка режимов

Но что, если вас не устраивают режимы 5.6 и 5.7 по умолчанию? Просто настройте их самостоятельно.

'connections' => [         'mysql' => [            // Игнорировать этот ключ, полагаться  на ключ strict             'modes' => null,             // Отключить принудительно все режимы, переопределяя  настройку strict             'modes' => [],             // Принудительно включить только указанные  режимы, переопределяя  настройку strict             'modes' => [                 'STRICT_TRANS_TABLES',                 'ONLY_FULL_GROUP_BY',             ],         ]     ] 

На этом все

Теперь у вас есть возможность взять полный контроль над тем какие режимы MySQL включены в коде, не касаясь конфигурации сервера.

По умолчанию, я рекомендовал бы включать “строгий” режим полностью. Но, могут быть какие-то конкретные случаи или старые проекты, когда может потребоваться осуществить тонкую настройку режимов и теперь это не просто возможно а очень просто!

ссылка на оригинал статьи https://habrahabr.ru/post/278629/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *