ホームページ  >  記事  >  データベース  >  MySqlの持病を詳しく解説

MySqlの持病を詳しく解説

藏色散人
藏色散人転載
2021-09-17 16:50:291629ブラウズ

1. デフォルトのエンコーディング セットの問題

フロントエンド データを表示すると、すべての select * from t_news が見つかります。すべてのコンテンツが見つかります。 。そうなると、クエリをパラメータ化するときに機能しなくなります。例:

Select * from t_news where title like ‘%Source Code Education%’; 0 個のデータが見つかりました。

id ​​= 1 の t_news から * を選択します。 1件のデータが見つかりました。

赤でマークされたフィールドに注目してください。これは変更後のものです。これらは元々は latin1 でした。

解決策:

Windows での MySQL の構成ファイルは my.ini で、通常はインストール ディレクトリのルート ディレクトリにあります。

Linux での MySQL の構成ファイルは my.cnf で、通常は /etc/my.cnf、/etc/mysql/my.cnf に配置されます。見つからない場合は、find コマンドを使用して見つけることができます。

my.ini/my.cnf を開き、次の 2 つのフィールドを変更します。

Ps: 設定ファイルを変更した後は、mysql を再起動する必要があります。

2. データはロールバックされません

プログラミング中に Spring はトランザクションを設定しますが、例外が発生すると、データベース内のデータは依然として変更されます。トランザクションやコード構成に問題がないことを確認した上で、データベースの特化を検討します。テーブルの設計には「Navicat」ツールを使用します。「オプション」列で、テーブルで使用されているストレージ エンジンが MyISAM であることがわかります。

MyISAM はトランザクションをサポートしていません。ロールバックすると不完全なロールバックが発生し、アトミックではありません。

MyISAM を InnoDB に変更します。

MySQL 構成ファイル (my.ini) にはデフォルトのストレージ エンジンもあります。テーブルの作成時に特別なステートメントがない場合は、デフォルトのストレージ エンジンが使用されます。

3. 大量のデータのインポートを最適化する

私たちの仕事では、必然的に大量のデータをインポートする状況に遭遇します。たとえば、以前にバックアップしたデータをクエリしたり、テストのために実際のデータをローカルにインポートしたり、データをバックアップ データベースに定期的にインポートしたり、その他のビジネス シナリオを実行する必要があります。

MySQL は、データを infile にロードするインポート メソッドを提供します。ただし、設定が不適切だとインポート速度が遅くなります。

解決策:

次のパラメータ値を増やします (通常は物理メモリの 80%)。ただし、32 ビット システムは 2 ~ 3.5G に制限されます。

4. カスタム関数 function (クラウド データベース) を有効にする

他の人のコードを実行するとき、またはサーバーを移植するときに、以前に定義されたデータベースの関数に遭遇することがあります。は使用できません。特にデータベースの場合、デフォルトでは関数機能が有効になっていないため、関数が実行されません。

まず、機能が有効になっているかどうかを確認します。以下に示すように:

ここでのカスタム関数機能はデフォルトではオフになっています。

解決策: 「set global log_bin_trust_function_creators = 1;」を使用して、カスタム関数機能を有効にします。

クエリを再度実行してください:

ただし、この方法はゼロタイムの解決策にすぎません。MySQL が再起動されると、この機能はデフォルトでオフになります。

カスタム関数機能を永続的に有効にするには、設定ファイルに「log-bin-trust-function-creators=1」を追加する必要があります。

5. Linux 環境におけるテーブル名の大文字と小文字の問題

Linux システム環境では、MySQL テーブル名はデフォルトで大文字と小文字が区別されます。テーブル名に大文字が誤って入力されると、クエリが見つからないことがあります。

解決策: my.cnf 構成ファイルの最後に「 lower_case_table_names=1 」を追加します。次に、MySQL を再起動します。

" lower_case_table_names=1 "この文は、入力ステートメントを強制的に小文字にしてからステートメントを実行することを意味します。

推奨学習: 「mysql ビデオ チュートリアル

以上がMySqlの持病を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。