現象: MySQL バージョン 5.7 以降では、日付型と日付時刻型のデフォルト値が「0000-00-00」に設定され、例外が発生します: 'time' のデフォルト値が無効です 理由:コマンド ライン ウィンドウで現在の sql_mode 構成を確認します。 @@sql_mode を選択します。 結果は次のとおりです。
2 つのオプション NO_ZERO_IN_DATE と NO_ZERO_DATE は、0000 などの日付と時刻を禁止します。したがって、mysql 構成ファイルで、sql_mode をリセットし、これら 2 つの項目を削除します。 解決 1. Windowsの場合: SET [SESSION|GLOBAL] sql_mode='modes' を使用します。 注: SESSION (デフォルト オプション): 現在のセッションで有効であることを意味します。GLOBAL (再起動が必要): グローバルに有効であることを意味します。 my.ini設定ファイルを変更することもできます *** デモ: グローバル sql_mode を 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, に設定 ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION' です 1. Linuxシステム: my.cnfファイルを変更し、[mysqld]を追加します。 次のようにコードをコピーします。 SQL モード = ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION 変更が完了したら、必ずMySQLを再起動してください。 2. Macシステム: MacOS にはデフォルトで my.cnf ファイルはありません。MySQL をカスタマイズする必要がある場合は、/usr/local/mysql/support-files/ ディレクトリ内の任意の .cnf ファイルをコピーします。 my-default.cnf をコピーして別のディレクトリに配置しました。上記の変更が完了したら、名前を my.cnf に変更し、/etc ディレクトリにコピーして、mysql を再起動しました。 sql_mode モードの問題の拡張 sql_mode 共通値の説明 1.SQL構文サポートクラス
GROUP BY 集計操作の場合、SELECT、HAVING、または ORDER BY 句の列が GROUP BY に表示されない場合は、SQL は無効です。これは、列クエリによるグループ化に含まれない列は矛盾するため、理解できます。 5.7 ではデフォルトで有効になっているため、5.6 から 5.7 へのアップグレードのプロセスに注意する必要があります。
ANSI_QUOTES が有効になっている場合、二重引用符は ` と同じように識別子として解釈されるため、文字列を引用符で囲むことはできません。 設定後、 update t set f1="" ... を実行すると、「フィールド リストに不明な列 '' があります」などの構文エラーが報告されます。
|| を演算子ではなく文字列連結演算子として扱います。これは Oracle データベースと同じであり、文字列連結関数 CONCAT() に似ています。
SHOW CREATE TABLE は、ENGINE などの MySQL 固有の構文を出力しません。mysqldump を使用して DB タイプ間で移行する場合は、この点を考慮する必要があります。
文字通り、ユーザーを自動的に作成するわけではありません。 MySQL ユーザーに権限を付与する場合、通常は GRANT ... ON ... TO dbuser を使用して同時にユーザーを作成します。このオプションを設定すると、Oracle の操作と同様になります。認証前にユーザーを作成する必要があります。これは 5.7.7 以降のデフォルトでもあります。 2. データ検査
日付「0000-00-00」は、次の厳密モードが設定されているかどうかに応じて、不正とみなされます。 1. 厳密モードが設定されている場合は、NO_ZERO_DATE が自然に満たされます。ただし、INSERT IGNORE または UPDATE IGNORE の場合は、「0000-00-00」は引き続き許可され、警告のみが表示されます。2. 非厳密モードで NO_ZERO_DATE が設定されている場合、効果は上記と同じで、「0000-00-00」は許可されますが、警告が表示されます。NO_ZERO_DATE が設定されていない場合は、警告は表示されず、完全に正当な値として扱われます。 3. NO_ZERO_IN_DATE は上記の状況と似ていますが、日付と曜日が 0 になるかどうか、つまり 2010-01-00 が有効かどうかを制御します。
ALTER TABLE または CREATE TABLE で ENGINE を指定する場合、必要なストレージ エンジンが無効になっているかコンパイルされていない場合はどうすればよいですか? NO_ENGINE_SUBSTITUTION が有効になっている場合は、直接エラーがスローされます。この値が設定されていない場合、CREATE は代わりにデフォルトのストレージ エンジンを使用し、ATLER は変更を行わず、警告をスローします。
これを設定すると厳密モードが有効になります。 なお、STRICT_TRANS_TABLES は複数の戦略の組み合わせではなく、INSERT および UPDATE で欠落または無効な値を処理する方法を指します。厳密モードでは、int に '' を渡すことは違法です。非厳密モードが有効になっている場合は 0 になり、警告が生成されます。
MySQL 5.0 以降のバージョンでは、3 つの sql_mode モードがサポートされています: set @@sql_mode=xxx mode name; よく設定される sql_mode は ANSI、STRICT_TRANS_TABLES、TRADITIONAL です。ANSI と TRADITIONAL は上記の組み合わせです。 3.ANSI モード: 緩いモードで、挿入されたデータをチェックします。定義されたタイプまたは長さを満たしていない場合は、保存する前にデータ型を調整するか切り捨て、警告を発します。 4.TRADITIONAL モード: 厳密モード。MySQL データベースにデータを挿入するときに、誤ったデータが挿入されないように厳密なデータ検証が実行され、エラーが報告されます。トランザクションに使用すると、トランザクションはロールバックされます。 3. STRICT_TRANS_TABLES モード: 厳密なモードでは、厳密なデータ検証が実行され、不正なデータは挿入できず、エラーが報告されます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux の grep コマンドと egrep コマンドの詳細な説明
>>: JavaScript+html はフロントエンドページでランダム QR コード検証を実装します
目次MySQL NDB Clusterとはクラスター構築のための準備作業クラスターのデプロイを開始す...
たった15行のCSSでiPhoneがクラッシュするWire のセキュリティ研究者 Sabri Had...
MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...
序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...
このブログは、MySQL8.0.15 を正常にインストールしたことを思い出すために書きました。以前は...
効果:スライドショーが一方向に動く場合、各画像のサイズ、位置、透明度、レベルを変更する必要があります...
目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...
react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...
目次結合構文: 1. InnerJOIN: (内部結合) 2. LeftJOIN: (左結合) 3....
この記事では、簡単なショッピングフォームを実装するためのJavaScriptの具体的なコードを参考ま...
ログローテーションは、Linux システムでは非常に一般的な機能です。ログローテーションは、システム...
良い画像素材のウェブサイトを見つけるのは難しいです。特に無料です。良い写真には非常に目を引く視覚効果...
最近、あるウェブサイトのバックエンドに一連の統計機能を追加していたのですが、条件によるカウントが必要...
導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...
結果:実装コード: html <link href='https://fonts.go...