実現したいこと
Djangoのadminサイトにてフォームに日本で入力した値をMysqlのCharfieldカラムに保存する。
発生している問題・分からないこと
タイトルと本文がcharfieldなのですが、日本語を記載した時のみ、エラーメッセージが出る。
英語を記載した時はエラーが出ずに保存ができる。
[20240426 追記]
MYSQL8.0の文字コードをmy.cnfを変更したらかえることができました。
ただエラーが変わらず出ております。
そのためエラーメッセージを修正しました。
状況としては本文に日本語を入れてもエラーが発生しなくなりましたが、
タイトルだけ日本語を入れると下記のエラーメッセージが出ます。
エラーが出ているカラムもobject_reprで自分では設定していないカラムなので詰まっている状況です。
エラーメッセージ
error
1OperationalError at /admin/top_page/newspost/8/change/ 2(1366, "Incorrect string value: '\\xE3\\x81\\x82' for column 'object_repr' at row 1") 3Request Method: POST 4Request URL: http://localhost:8080/admin/top_page/newspost/8/change/ 5Django Version: 4.2 6Exception Type: OperationalError 7Exception Value: 8(1366, "Incorrect string value: '\\xE3\\x81\\x82' for column 'object_repr' at row 1") 9Exception Location: /usr/local/lib/python3.8/site-packages/MySQLdb/connections.py, line 259, in query 10Raised during: django.contrib.admin.options.change_view 11Python Executable: /usr/local/bin/python 12Python Version: 3.8.19 13Python Path: 14['/code', 15 '/usr/local/lib/python38.zip', 16 '/usr/local/lib/python3.8', 17 '/usr/local/lib/python3.8/lib-dynload', 18 '/usr/local/lib/python3.8/site-packages']
該当のソースコード
python
1class NewsPost(models.Model): 2 CATEGORY = (('TECH SKILL','tehSkill'), 3 ('サッカー・フットサル','soccer_footsal'), 4 ('登山','climb'), 5 ('食事','food'),) 6 7 title = models.CharField( 8 verbose_name='タイトル', 9 max_length=200 10 ) 11 content = models.TextField( 12 verbose_name='本文' 13 ) 14 image1 = models.ImageField( 15 verbose_name='イメージ画像1', 16 upload_to = 'photo1' 17 ) 18 image2 = models.ImageField( 19 verbose_name='イメージ画像2', 20 upload_to = 'photo1', 21 blank = True, 22 null = True 23 ) 24 category = models.CharField( 25 verbose_name='カテゴリ', 26 max_length=50, 27 choices = CATEGORY 28 ) 29 30 posted_at = models.DateTimeField( 31 verbose_name='投稿日時', 32 auto_now_add=True 33 ) 34 35 def __str__(self): 36 return self.title
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
現時点での調査結果
・djangoとMysqlの文字コードが違う事で対象エラーが出るらしい。
上記に対して実施した事
・dajngoのsettings.pyのDATABASES項目に下記の設定を追加。
DATABASES = {
'default': {
'OPTIONS': {
'charset': 'utf8mb4',
},
}
・Mysqlのデータベースの文字コード設定を下記コマンドで変更。
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
・my.cnfに下記の設定を追加する。
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
実施結果
・変わらずエラーが出ます。。。
補足
特になし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。