クラウド、レンタルサーバ、SEO、WPなどのレシピを!

サーバーレシピ

CentOS7 MySQL python WEBアプリ

MySQL 5.7 文字コードをUTF8に!日本語が登録できない!

投稿日:

MySQL、文字コードの基本・・・
改めて、整理を・・・(笑)

PythonでDB、Insertエラー

↑「encode」が、どうのこうの、と、いっています・・・

文字コード等でしょうか・・・・

今回、日本語のデータを、Insertしてみましたが、試しに、ローマ字で、Insertしてみます。
すると、うまくいきます。

データベースの文字コードを見てみます。

MySQLデーターベスの文字コード

データベースの文字コードをチェックしてみます。

チェックには、

として、
「show variables like 'character%'」
というコマンドで、チェックをします。

↑上記、「latin1」となっているのが、原因の一つです。

↑と、SQLコマンドで変更することができます。

↑と、utf8になり、意図通りになりますが、DBを再起動すると、元に戻ります。

↑と、「latin1」のまま、テーブルを作成してみます。

MySQLテーブルの文字コード

テーブルの文字コードを見てみます。

CHARSET=latin1 となっています。
これが、日本語登録ができない原因です。

これをUTF8にするには、2つの方法があります。

1)SQLコマンドで変更する
2)SQLダンプで、書き出して、utf8に変更して読み込む。

1)SQLコマンドで変更する

↑と、行い、うまくいけば、

というように表示が出てきます。

しかし、

というエラーになる場合があります。
これは、「外部キー」が使われているため、SQLコマンドで、UTF8にするのは、面倒です・・・
この場合、次の方法で行う方が楽です。

2)SQLダンプで、書き出して、utf8に変更して読み込む。

A) データベースを書き出す(エキスポートする)
B) データベースを削除する
C) データベースを作成する
D) 書き出したデータベースの中身を変更する
E) データベースを読み込む(インポートする)

A) データベースを書き出す(エキスポートする)

コマンドラインから、

と書き出します。
SQLコマンドでも可能かと思います。

B) データベースを削除する

で、データベースを削除をします。

C) データベースを作成する

↑と、あらためて、DBを作成します。

D) 書き出したデータベースの中身を変更する

A) で、書き出した、(データベースファイル)をテキストエディタで開いて、「latin1」というところを、「utf8」にします。

E) データベースを読み込む(インポートする)

コマンドラインから、

とします。

「#」のコマンドプロンプトだけ、戻ってくれば、成功です。

根本的に文字コードをUTF8に設定

の文字コードを変更しましたが、データベースを再起動すると、元に戻ってしまいます。
また、毎回、DBを書き出したりするのも大変です。
根本的に、変更するには・・・

この3行を最後のほうに加えます。

character-set-server=utf8
は、
[mysqld]
のセクションに書きます。

最後に書くと、自動的に、[mysqld]のセクションになるので大丈夫かと!

この設定をすると、データベースの文字コード、テーブルの文字コードが、UTF8になって、エラーになることはないかと・・・

MySQL文字コード・・・

昔の資産を今の時代のMySQLで動かす場合、EUCである、ujisに設定したりして、コンテンツの寿命を延ばしています。

今の時代、UTF8にしておけば、大丈夫という感じになってきて、扱いやすい感じです・・・
文字コードを気にしないで、プログラムなどを組めるといいですね。

 

-CentOS7, MySQL, python, WEBアプリ

Copyright© サーバーレシピ , 2019 All Rights Reserved.