・mysqlのエラー「1366, ‘Incorrect string value」の対処方法がわかる
・mysqlに顔文字をinsertする方法がわかる
・なぜ絵文字をutf-8でmysqlに保存しようとすると、エラーが出るのかわかる
メイドさん |
mysqlに絵文字をinsert文で保存しようとすると、「1366, ‘Incorrect string value」エラーに遭遇する人が多いようです。
この記事では、pythonとdatasetライブラリ(DBのORMライブラリ)を使用してmysqlにデータを保存する例で解説します。
発生した問題
pythonとdatasetライブラリ(DBのORMライブラリ)を使用して、mysqlに絵文字を保存しようとしました。その結果、「1366, ‘Incorrect string value」エラーに遭遇しました。
原因
mysqlの文字コードの設定が「utf-8」。絵文字を保存するには、4バイト必要だが、utf8は3バイトまでしか対応していないため、保存できない。
その結果、「1366, ‘Incorrect string value」エラーが出力されていた。
解消方法
mysqlのテーブルの文字コードをutf8mb4にすること
絵文字を保存するには、4バイト必要です。そのため、
mysqlのテーブルの文字コードをutf8mb4に変更します。
文字コードの例:
「あ」→「%E3%81%82」
「😊」→「%F0%9F%98%8A」
上記の内容からも絵文字は、4バイトで保存されていることがわかります。
参考サイト
文字コード変更例
■すでに存在するテーブルの場合
alter table 「テーブル名」 default character set utf8mb4;
■テーブルを新規に作成する場合
CREATE TABLE `テーブル名` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`building_id` int(2) DEFAULT NULL,
`meter` int(4) DEFAULT NULL,
`timestamp` datetime DEFAULT NULL,
`meter_reading` float DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `building_id` (`building_id`),
KEY `meter_reading` (`meter_reading`),
KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
DB接続ドライバーの文字コードの設定をutf8mb4にすること
mysqlの文字コードを変更したら、pythonなどで使用しているmysql接続ドライバーの文字コードの設定も変更します。
以下は、datasetライブラリのmysqlに接続する部分です。
#DBには絵文字もつかうことがあるため文字コードはutf8mb4にする
self.db = dataset.connect(
'mysql://%s:%s@%s/%s?charset=utf8mb4' % (user_id, password, host, db_name))
まとめ
以上の方法で、無事に絵文字をmysqlに保存できるようになりました。
めでたしめでたし・・・。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |