Если вы помните мой пост Как отключить строгий режим MySQL на Laravel Forge (Ubuntu), вы уже знаете, что MySQL 5.7 представил то, что-то обычно называется «строгий режим», который на самом деле является сочетанием новых режимов. В сумме они заставляют MySQL обрабатывать ваши запросы немного более строго, чем раньше.
В той статье я показал, как отключить его на Ubuntu. Но с тех пор, Adam Wathan добавил функционал к Laravel, который позволяет определить, используете ли вы «строгий режим». А также позволяет настроить, какие точно режимы вы хотите использовать — и все это через код.
Если можно изменить конфиг приложения вместо настройки сервера, без ущерба производительности, я всегда выберу этот вариант. Одной проблемой меньше при деплое в новом окружении. Поэтому я необычайно рад этой новой функции.
Прежде чем говорить о самой фиче, давайте быстро освежим в памяти что означает «строгий режим».
MySQL имеет «режимы», каждый из которых включает или отключает определенное поведение. Например, ERROR_FOR_DIVISION_BY_ZERO это режим, который, как вы уже догадались, выдает ошибку, когда вы делите на ноль в SQL. Если этот режим отключен, вы просто молча получите результат NULL.
«Строгий режим», на самом деле является списком следующих настроек включенных в 5.7 по умолчанию:
Вы можете узнать больше об этих режимах в документации MySQL.
До версии 5.7 единственный режим, который был включен по умолчанию — NO_ENGINE_SUBSTITUTION.
Благодаря этой новой фиче в Laravel теперь можно сделать три вещи: Отключить «строгий режим», возвращаясь к поведению <= 5.6; включить «строгий режим», установив его на поведение 5.7; или настроить точно какие именно режимы включены.
Эти параметры живут в конфигурационном / database.php в connections.mysql разделе. Для начала, давайте посмотрим на включение/выключение «строгого» режима.
Но что, если вас не устраивают режимы 5.6 и 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 включены в коде, не касаясь конфигурации сервера.
По умолчанию, я рекомендовал бы включать “строгий” режим полностью. Но, могут быть какие-то конкретные случаи или старые проекты, когда может потребоваться осуществить тонкую настройку режимов и теперь это не просто возможно а очень просто!