質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

138閲覧

djangoのadminサイトで日本語の値の時、MysqlのCharfieldのカラムにレコードを登録しようとするとOperationalError が出る。

con2319

総合スコア52

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/04/24 18:06

編集2024/04/26 10:40

実現したいこと

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

実施結果
・変わらずエラーが出ます。。。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました!!
原因としてはDBのデフォルトで設定されていた文字コードが
latin1だったのに対してアプリ側での文字コードがutf8だった事でした。

ただ途中で追記した通りDBの文字コードはmy.cnfのの設定変更をしたことで
自作のテーブルへの保存は解決しました。

しかしadmin画面を設定した場合、デフォルトでdjango_admin_logテーブルが作成されます。
ここにほっぞんされるカラムの文字コードがlatin1である為、記載のエラーが出ました。
そのため、カラムの文字コード設定を下記のクエリで変更する事でエラーが解消されます。

sql

1ALTER TABLE django_admin_log CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

上記で変更した後下記のクエリで確認して文字コードが変わっていれば最後に動確して問題なければ修正完了です。

sql

1SHOW FULL COLUMNS FROM django_admin_log;

投稿2024/04/28 06:45

con2319

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問