MySQLのエンコードの不一致によって発生する可能性のある問題

MySQLのエンコードの不一致によって発生する可能性のある問題

ストアドプロシージャとコーディング

MySQL ストアド プロシージャでは、テーブルとデータのエンコーディングがデータベースとストアド プロシージャのデフォルトのエンコーディングと異なる場合、MySQL は条件列のデータに対して対応するエンコーディング変換を実行するため、SQL はインデックスを使用しない場合があります。たとえば、次のテーブル データは latin1 であり、MySQL パーサーは何らかの変換を実行します。

... WHERE namecolumn = NAME_CONST('in_namecolumn',_utf8'MP201022' COLLATE 'utf8_general_ci')

ストアド プロシージャで対応するエンコード変換 (通常は varchar/char フィールドの変更) を実行すると、インデックスを正常に使用できるようになります。詳細については、mysql-slow-when-run-as-stored-proc を参照してください。

... WHERE namecolumn = convert(in_namecolumn using latin1) collat​​e latin1_swedish_ci

SQLを実行するためのJDBC直接接続

jdbc 接続を介して SQL を実行するときに、エンコーディングが一貫していない場合は、次に示すように、varchar および char 型も変換する必要があります。

... WHERE namecolumn = convert(in_namecolumn using latin1) collat​​e latin1_swedish_ci

そうしないと、次のエンコード不整合エラーが発生する可能性があります (mysql-connector のバージョンに応じて動作が異なる場合があります)。

SQL 状態 [HY000]: エラー コード [1267]: 演算 '=' の照合順序 (latin1_swedish_ci、IMPLICIT) と (utf8mb4_general_ci、COERCIBLE) の組み合わせが不正です

jdbc useSSL パラメータの変更

mysql-connector-java 構成では、useSSL パラメータに次の違いがあります。5.1.38 以降、useSSL は MySQL 5.5.45+、5.6.26+、または 5.7.6+ でデフォルトで有効になります。対応する requireSSL および verifyServerCertificate パラメータも有効になります。

< 5.1.38:
 ConnectionProperties.useSSL=サーバーとの通信時にSSLを使用する(true/false)、デフォルトは「false」

>= 5.1.38
 ConnectionProperties.useSSL=サーバーとの通信時にSSLを使用する(true/false)。MySQL 5.5.45+、5.6.26+、または5.7.6+に接続する場合のデフォルトは「true」、それ以外の場合のデフォルトは「false」です。

MySQL 5.7.x 以降では、SSL がデフォルトで有効になり、明示的に暗号化しないように指定しない限り、クライアントは接続時に自動的に暗号化をネゴシエートします。mysql-connector-java は、5.1.38 以降、useSSL をデフォルトで有効にしています。そのため、jdbc の下位バージョンで MySQL 5.7.x に接続する場合は暗号化の問題は発生しませんが、jdbc の上位バージョンで 5.7.6+ に接続する場合は暗号化の問題が発生します。useSSL=false を明示的に指定する必要があります。そうすれば、jdbc の上位バージョンで MySQL 5.5、5.6 に接続する場合は暗号化の問題は発生しません。

これで、一貫性のない MySQL エンコーディングによって発生する可能性のあるいくつかの問題についての記事は終わりです。一貫性のない MySQL エンコーディングによって発生する問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • PHP と MySQL における uft-8 の中国語エンコードの文字化けに対するいくつかの解決策
  • MySQL で現在のデータベース エンコーディングを表示および変更する方法
  • MySQLデータベースのテーブルとフィールドのエンコード方法を変更する方法
  • MySqlは文字化けを避けるためにデータベースのエンコードをUTF8に変更します。
  • MySQL で文字エンコーディングを表示および変更する方法
  • MYSQL データベースで UTF-8 中国語エンコードを使用する場合の文字化けの解決方法
  • Mysql データベースのエンコーディングの問題 (データベース、テーブル、フィールドのエンコーディングを UTF8 に変更)
  • MySQL 5.5 のデフォルトのエンコーディングを変更する (グラフィックの手順を UTF-8 エンコーディングに変更する)
  • 中国語(gbk または utf8)をサポートするために、mysql エンコーディングを確認して変更します。
  • MySQLの文字エンコーディング設定方法

<<:  div が iframe に覆われるいくつかの状況とその解決策

>>:  ドメイン名、ポート、異なるIPに基づくnginx仮想ホスト設定の実装

推薦する

CentOS で yum を使用して rabbitmq-server をインストールする方法

RabbitMQをインストールする前にSocatをインストールする必要があります。そうしないと、Ra...

HTML での非同期ファイルアップロードの例

コードをコピーコードは次のとおりです。 <form action="/hehe&qu...

mysql 変数の使用例の分析 [システム変数、ユーザー変数]

この記事では、例を使用して MySQL 変数の使用方法を説明します。ご参考までに、詳細は以下の通りで...

CSS の子要素の Z インデックスと親要素の兄弟ノードの階層問題を解決する

1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...

Windows プラットフォームでの MySQL のインストールと設定方法と注意事項

2.1、msiインストールパッケージ2.1.1、インストール特に重要なのは、インストール前に、元の ...

proxy_pass がパス パスに従って転送する場合の "/" 問題の詳細な説明

nginx で proxy_pass を設定するときに、^~ に従ってパスを一致させる場合は、pro...

MySQL ソート機能の詳細

目次1. 問題のシナリオ2. 原因分析3. 解決策4. 知識を広げる4.1 クエリの最適化を制限する...

CSS スクロールバースタイル変更コード

CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...

MySQL でのワイルドカードを使用したファジークエリの実装に関する簡単な説明

MySQL データベースでは、あいまいクエリが必要な場合にワイルドカードを使用します。まず、演算子と...

MySQLデータベースがNULLを可能な限り避ける理由

MySQL の多くのテーブルには、NULL が列のデフォルト属性であるため、アプリケーションが NU...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...

TypeScript名前空間の説明

目次1. 定義と使用1.1 定義1.2 使用2. 複数のファイルに分割する3. エイリアス序文: T...

Tomcat 初回展開 Web プロジェクト プロセス図

独自のWebプロジェクトをtomcatディレクトリの下のwebappsディレクトリに配置します。 R...

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

Linuxのtimeコマンドの使い方の詳しい説明

1. コマンドの紹介時間は、コマンドの実行に費やされた時間や関連するシステム リソース、その他の情報...