Laravel 5.2の「厳格モード」およびその他のMySQL設定

私の投稿Laravel Forge(Ubuntu)MySQL strictモードを無効にする方法を覚えているなら、MySQL 5.7が一般に「strict mode」と呼ばれるものを導入していることを既に知っています。 要するに、MySQLは以前よりも厳密にクエリを処理するように強制します。

その記事では、Ubuntuで無効にする方法を示しました。 しかしそれ以来、Adam WathanはLaravelに機能を追加しました。これにより、「厳格モード」を使用しているかどうかを判断できます。 また、使用するモードをコード全体で正確に構成することもできます。

パフォーマンスを犠牲にすることなく、サーバーを構成する代わりにアプリケーション構成を変更できる場合は、常にこのオプションを選択します。 1つの問題は、新しい環境に展開する場合の問題です。 したがって、この新しい機能に非常に満足しています。


5.7で厳密モードを無効にするだけでなく、この関数を使用できることに注意してください。 5.6に含めることができ、非常に先見の明があります。 5.6で問題なく切り替えられるように、5.6で動作するアプリケーションで厳格モードを有効にします。 だから、あなたは事前に、落ちるかもしれないすべてを理解するでしょう。


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のこの新機能のおかげで、3つのことができるようになりました。「厳格モード」を無効にし、動作<= 5.6に戻ります。 「厳格モード」を有効にして、動作5.7に設定します。 または、オンにするモードを正確に構成します。

これらのパラメーターは、connections.mysqlセクションのconfiguration / database.phpにあります。 始めるために、「strict」モードのオン/オフを見てみましょう。

'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モードを完全に制御できるようになりました。

デフォルトでは、「厳格」モードを完全にオンにすることをお勧めします。 しかし、モードを微調整する必要がある場合、特定のケースや古いプロジェクトが存在する可能性がありますが、今ではそれが可能だけでなく、非常に簡単です!

Source: https://habr.com/ru/post/J278629/


All Articles