現象: 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 コード検証を実装します
ウェブサイトを構築するとき、HTML 言語は重要ではないと思われるかもしれませんが、実際には、基本的...
この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...
競合の主な症状は、FLASH ボタンがジャンプし続け、不安定になり、Web ページの外観と通常のアク...
開発中にこのような要件に遭遇したので、将来使用するために記録しました。需要背景キーボード ショートカ...
序文: MySQL を使用すると、時間の表示が正しくない、タイムゾーンが GMT+8 ゾーンにない、...
序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...
目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...
RedHat6.5インストールMySQL5.7チュートリアル共有、参考までに、具体的な内容は次のとお...
この記事では、ネストされたタブ機能を実装するためのjQueryの具体的なコードを参考までに紹介します...
なお、これはvue-cliで作成したプロジェクトではありません。vue.jsを参照して記述したHTM...
皆さんおはようございます。しばらく記事を更新していませんでした。実は、私は流行中に1か月以上家にいて...
並べ替えクエリ (order by)電子商取引の場合: 今日完了したすべての注文を表示し、取引金額に...
以下のように表示されます。上記のように、置き換えるだけです。 Python3.6-MySql でファ...
目次背景成し遂げる1. カプセル化された /utils/dialogControl.js 2.ダイア...
いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...