Django エラー「1366, “Incorrect string value:」が発生した場合の対処法
Djangoで「python manage.py migrate」実行時にエラー「1366, “Incorrect string value:」が発生した場合の対処法を記述してます。
環境
- OS CentOS Linux release 7.9.2009 (Core)
- mysql 5.7.32
エラー全文
migrate実行時に発生。
python manage.py migrate
エラー全文
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE3\\x82\\xB0\\xE3\\x83\\xAB...' for column 'name' at row 4")
原因
文字コードはDB側もDjango側も「utf8mb4」に設定されていたが、作成済みのDBが別の文字コードになっていたため
mysql
show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
/etc/my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character_set_server=utf8mb4
skip-character-set-client-handshake
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'hoge',
'USER': 'root',
'HOST': 'localhost',
'PASSWORD': '',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4'
}
}
}
対処法
DBの文字コードを「utf8mb4」変更する
alter database hoge CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
tableの文字コードを変更する場合は、以下となります。
alter table <table-name> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-
前の記事
HTML5 inputタグのrange属性で数値選択スライダー 2021.01.08
-
次の記事
javascript setAttributeで属性を作成する 2021.01.09
コメントを書く