MySQLのエラー『Incorrect String Value』の解決方法
MySQLで『Incorrect String Value』エラーが発生すると、データの挿入や更新が失敗する。このエラーは、データベースの文字エンコーディングと挿入しようとしているデータのエンコーディングが一致しないときに起こる。発生条件と具体的な解決策を解説する。
目次
1. エラーの発生条件
このエラーは、以下のような状況で発生する。
- データベースの文字セットがUTF-8ではなく、特殊文字を正しく扱えない。
- カラムの文字セットが、挿入しようとする文字をサポートしていない。
- クライアントの文字エンコーディングとサーバーのエンコーディングが異なる。
- テーブルの照合順序(collation)が不適切に設定されている。
エラーメッセージの例:
ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x81' for column 'column_name' at row 12. 文字セットと照合順序を確認する
データベース、テーブル、カラムの文字セットを確認する。
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;結果に CHARSET=utf8 または CHARSET=utf8mb4 が含まれているかをチェックする。
3. 文字セットをUTF-8MB4に変更する
MySQLのutf8 は4バイト文字をサポートしていないため、絵文字などの特殊文字を扱う場合は utf8mb4 に変更する。
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;4. カラム単位での文字セット変更
特定のカラムの文字セットを変更する場合、以下を実行する。
ALTER TABLE table_name CHANGE column_name column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;5. クライアントの文字セットを確認する
クライアントとサーバーの文字セットが一致していないとエラーが発生する。
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_connection';
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'character_set_server';値がutf8mb4でない場合、クエリ実行時に変更する。
SET NAMES utf8mb4;6. my.cnf(MySQL設定ファイル)を修正する
永続的にutf8mb4を使用するには、my.cnfを編集する。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4設定変更後、MySQLを再起動する。
sudo systemctl restart mysql7. テーブルのデータをエクスポートして再作成
既存のデータがエンコーディングの変更に対応していない場合、データをエクスポートして新しいテーブルに挿入する。
mysqldump -u root -p --default-character-set=utf8mb4 database_name > backup.sqlテーブルを削除し、エンコーディングをutf8mb4に設定して作成し直す。
DROP TABLE table_name;
CREATE TABLE table_name (
id INT PRIMARY KEY AUTO_INCREMENT,
text_column TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
);バックアップデータをインポートする。
mysql -u root -p database_name < backup.sql8. 特定の文字を手動で変換する
一部の文字がエラーを引き起こす場合、それらを手動で変換する。
UPDATE table_name SET column_name = CONVERT(column_name USING utf8mb4);9. MySQLのバージョンを確認する
古いバージョンのMySQLでは、utf8mb4 がサポートされていない場合がある。
SELECT VERSION();MySQL 5.5.3以降でutf8mb4がサポートされている。古い場合はアップグレードを検討する。
10. MySQLのエラーログを確認する
詳細な情報を取得するために、MySQLのエラーログを確認する。
sudo cat /var/log/mysql/error.log-
前の記事
Rocky LinuxでのCI/CDパイプライン構築ガイド 2025.03.14
-
次の記事
Avoid using non-primitive value as keyエラーの解決策 2025.03.14
コメントを書く