MySQLのMySQLのsql_modeのパターンの説明とパターン説明と設定sql_modeの設定

MySQLのsql_modeのパターンの説明と設定

 

sql_modeののMySQLの合理的なセット

    sql_modeのを容易に変数を見過ごされている、デフォルトの値は、この構成では、ヌル値であるようないくつかの無効なデータが挿入させるようないくつかの不正操作を可能にすることです。この値は、開発とテストの段階で問題を見つけることができるように、開発、テスト環境のデータベースを設定する必要があり、本番環境でstrictモードに設定する必要があります。

    

SQLモデルは、問題の次の種類を解決するために使用します

  (1)SQLモードを設定することで、さまざまな緊縮データチェック、効果的な保護のデータの準備を行うことができます。

  (2)SQLのモデルはほとんどのSQL標準SQLの構文を確保するために緩やかなモードで設定することで、このようなアプリケーションの異なるデータベース間で移行する際、あなたはビジネスのSQLに大きな変更を加える必要はありません。

  データはSQLモードMySQLが提供できるように、(3)前の異なるデータベース間のデータ移行を、より簡単に、ターゲット・データベースに移行します。

    

次のようにsql_modeの一般的な値は次のとおりです。 

    ONLY_FULL_GROUP_BY:

    SELECTの列は、GROUP BYに表示されていない場合、列はGROUP BY句ではないので、集計GROUP BY操作のために、次にSQLは、合法的ではありません

 

    NO_AUTO_VALUE_ON_ZERO:

    値は、成長カラムの衝撃から挿入されています。デフォルトの設定では、自己生成の成長値の代わりに挿入0またはNULL。あなたは0の値を挿入すると、その列が自己成長である場合は、このオプションが便利です。

 

    STRICT_TRANS_TABLES:

    このモードでは、値が現在の操作、非トランザクションテーブルには制限を中断、トランザクション・テーブルに挿入することができない場合

    NO_ZERO_IN_DATE:

    strictモードでは、ゼロの日と月が許可されていません

 

    NO_ZERO_DATE:

    この値は、MySQLデータベースがゼロの日付を挿入し、ゼロ挿入日付を許可しない、設定されている代わりに、警告のエラーがスローされます。

 

    ERROR_FOR_DIVISION_BY_ZERO:

    データがゼロである場合は、プロセスに警告が生成される代わりにエラーを挿入または更新。パターンが与えられていない場合は、NULLを返したときにデータのMySQLゼロ

 

    NO_AUTO_CREATE_USER:

    GRANTは、ユーザーが空白のパスワードを作成禁止します

 

    NO_ENGINE_SUBSTITUTION:

    あなたはストレージエンジンがコンパイル無効になっているかいない必要がある場合は、エラーをスローします。この値は、デフォルトのストレージエンジンの交換を設定し、例外をスローされていない場合

 

    PIPES_AS_CONCAT:

    類似した文字列の連結方式を接続文字列またはオペレータとみなし、Oracleデータベースが同じであること、また、ブレンディング機能ではない「||」演算子

 

    ANSI_QUOTES:

    それは識別子として解釈されるためANSI_QUOTESは、その後、ストリング二重引用符を参照するために使用することができない、有効

 

    ORACLE的sql_modeの设置等同:PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。

     

    MySQLを使用している場合は、次のように、オラクルを使用する人々の習慣を維持するために、MySQLは設定SQL_MODEことができます。

     

    追加のmy.cnfを以下の

    [mysqldを】

    sql_modeの= 'ONLY_FULL_GROUP_BY、NO_AUTO_VALUE_ON_ZERO、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、

    ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、PIPES_AS_CONCAT、ANSI_QUOTES」

      

      

注: MySQL5.6とMySQL5.7のsql_modeのデフォルトモードのパラメータが同じではない、モード5.6 NO_ENGINE_SUBSTITUTIONあり、実際には、ヌル値がないモード設定に相当する表し、それはモードを緩和するものとして理解することができます。モード5.7は、厳密なモードであるSTRICT_TRANS_TABLES、です。

 

    設定はリラックスモードであれば、我々はデータを挿入する際、でも間違ったデータを与えたにも受け入れられる、と与えられていない、例えば:私はフィールドを持つテーブルを作成するとこのフィールドの名前は、データフィールド10の長さを有する、請求Iは、タイプ名、例えば「1234567890abc」の設定値を超えた場合、データを挿入CHAR(10)、名前、10は、設定されたフィールドの長さを超えて、それは文句を言わないし、あなたが「1234567890」のためのデータが格納されていることを意味最初の10個の文字を、堆積させるために、しかし、「ABC」がないだろうが、我々は、このデータが間違って与えることを知って、 、フィールドの長さよりも、エラーはなかった、とMySQLの裁量と受け入れられ、これがモードの緩和の効果が、実際には、開発、テスト、本番環境では、我々はstrictモードを採用すべきであるため、このエラーそれはMySQL5.7のバージョンがstrictモードにデフォルト値をSQL_MODEし、私たちも、MySQL5.6を使用するので、それは自己である必要があり、エラーの魚でなければなりません strictモードが、あなたは、私たちが自分自身のレベルを開発するプログラムを予測する必要があり、実際には、パリティデータを含め、多くの時間を自分自身をダウン取っている。これらは、すべてのデータを操作しようとしているなど、MySQLデータベース、覚えていますトラブルがプロジェクトにステップ数を書くことと、これらのチェックは、しかし、やってますが、そうした後、我々はデータベースの移行または移行プロジェクトを実施している、それは非常に簡単になります、あなたが測定する自分でこれを参照してください。データ検証に加えてmysqlの、あなたはゆっくりと、それはずっと、ずっと、たくさんのことを行いますあなたのプログラムが掃引されて行うことができますことがわかりますプロセスを学びます。

 

後でstrictモードに変更する問題がある可能性があります。

    設定モードがNO_ZERO_DATEが含まれている場合、MySQLデータベースは、ゼロ挿入日付を許可する代わりに、警告のエラーがスローされますゼロの日付を挿入しません。例えばTIMESTAMPフィールド(表示はDEFAULT句を宣言されていない場合はNULL)カラムを含むテーブルが自動的にデフォルト「0000-00-00 00:00:00」(ゼロタイムスタンプ)が割り当てられ、この試験はまた、テーブルやカラムの日でありますゼロ「0000-00-00」COMMENT「日付」のデフォルト日付許可挿入、これらは明らかにNO_ZERO_DATEのsql_modeの中に満足していないが与えられます。

 

モード設定及び変更(例えば、上記の課題を解決するために)。

    モード:まず、@@ sql_modeのを選択した値のコピーをチェックアウトし、前記NO_ZERO_IN_DATE、NO_ZERO_DATEを削除し、その後設定sql_modeの=「修正された値」または設定セッションのsql_mode =「修正値」行う行う;たとえば:設定されたセッションのsql_mode = 'STRICT_TRANS_TABLES'; strictモードへ

        このメソッドは、現在のセッションのみが発効しません閉じて、現在のセッションに適用されます。

    第二の方法:選択@@のglobal.sql_modeの最初の実装は、値をチェックアウトしNO_ZERO_IN_DATE、NO_ZERO_DATEが削除それらをコピーし、グローバルsql_modeの=「修正値」を設定します。

        このメソッドは、現在のサービスに有効であり、再MySQLサービスが失敗しました

 

    方法3:mysqlのインストールディレクトリまたはのmy.cnfをファイル(Windows my.iniファイルシステム)、新sql_modeの= ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、 NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION、

        my.cnfのは、次の行を追加します。

        [mysqldを】

        sql_modeの= ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER

 

        その後、MySQLを再起動します。

    このメソッドは、永続的である。もちろん、本番環境は、MySQLサービスを再起動することは禁止され、問題のある行を解決するために、2つのプラス3つの方法を経由して、その後も、日が本当にMySQLサービスが有効に恒久的になります再起動します。

おすすめ

転載: www.cnblogs.com/taosiyu/p/11229946.html