UE4&

Unreal Engine 4 ・プログラミング

データベースクエリのエラー3995の対処法

データベースクエリの Error 3995 の対処法

最近、メルマガの登録フォームを更新したところ、エラー3995が発生しました。このエラーの原因と対処法について解説します。

 

エラーログ

�f�[�^�x�[�X�G���[���������܂����B Error Number: 3995 Character set 'binary' cannot be used in conjunction with 'utf8mb3_general_ci' in call to regexp_like. SELECT COUNT(*) AS cnt FROM (of_customer_tbl) WHERE `form_id` = '148200' AND `time_regist` >= '2024-04-08 03:54:09' AND BINARY mail REGEXP '[A-Z]{3,}'

 

Chat GPT の回答

最近、私たちはメルマガの登録フォームを更新しました。しかし、新しいデータベースクエリを実行したところ、エラー3995が発生しました。このエラーは、文字セット 'binary' と 'utf8mb3_general_ci' が同時に使用できないことが原因でした。

このエラーを解決するために、以下の手順を踏みました。

1. 文字セットの確認


データベースの文字セットが 'utf8mb3_general_ci' を使用していることを確認しました。その後、クエリで使用している正規表現がこの文字セットと互換性があるかどうかを確認しました。

 

2. BINARYキーワードの削除

クエリからBINARYキーワードを削除し、クエリの動作を確認しました。メールアドレスが既にバイナリの照合順序を使用している場合、BINARYキーワードを明示的に使用する必要はないかもしれません。

 

3. 正規表現の更新

メールアドレスの列が大文字小文字を区別しない場合、大文字のアルファベットにマッチする簡単な正規表現を使用しました。これにより、BINARYキーワードの使用を回避できます。

この修正を行うことで、クエリのエラーが解消されました。今後もデータベースクエリの実行時には、文字セットと正規表現の互換性に注意し、必要に応じて修正を行っていきます。

SELECT COUNT(*) AS cnt FROM of_customer_tbl WHERE `form_id` = '148200' AND `time_regist` >= '2024-04-08 03:54:09' AND mail REGEXP '[A-Z]{3,}'

以上が、データベースクエリのエラー3995の対処法についての解説でした。エラーが発生した際には、ぜひこの方法を参考にしてみてください。

 

Windows  copilot の回答

エラーの概要

MySQLでクエリを実行する際に、エラー番号3995が発生しました。このエラーは、文字セット'binary'と'utf8mb3_general_ci'が同時に使用されているために発生します。具体的には、`REGEXP`関数内で`BINARY`キーワードと組み合わせて使用されています。

 

エラーの原因

MySQLでは、`REGEXP`や`RLIKE`などの正規表現を使用する際に、文字列の比較は指定されたコラーション(照合順序)に基づいて行われます。しかし、`BINARY`キーワードは、文字列をバイナリとして扱い、大文字と小文字の違いを区別します。これは、`utf8mb3_general_ci`のような大文字と小文字を区別しないコラーションとは相容れません。

 

対処法

この問題を解決するためには、`BINARY`キーワードを削除し、代わりに`COLLATE`句を使用して、大文字と小文字を区別するコラーションを指定します。例えば、`utf8mb4_bin`を使用することができます。

修正後のクエリは以下のようになります:

```sql SELECT COUNT(*) AS cnt FROM (of_customer_tbl) WHERE `form_id` = '148200' AND `time_regist` >= '2024-04-08 03:54:09' AND mail COLLATE utf8mb4_bin REGEXP '[A-Z]{3,}' ```

この修正により、`mail`列の値は大文字と小文字を区別する形で正規表現と比較され、エラーが解消されます。

注意点

この修正は、`mail`列が`utf8mb4`文字セットであることを前提としています。もし異なる文字セットを使用している場合は、適切なコラーションを指定する必要があります。また、この修正はクエリのパフォーマンスに影響を与える可能性があるため、大量のデータに対して実行する前にパフォーマンスを確認することをお勧めします。

以上が、MySQLのエラー番号3995についての対処法です。この情報が役立つことを願っています。