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



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



All Articles