Ubuntu環境のMySQLで中国語が文字化けする問題の解決方法の紹介

黄舟
リリース: 2017-03-29 13:43:52
オリジナル
1146 人が閲覧しました

httpMySQL中国語文字化け問題 (私のものは Ubuntu システムです) について、私はインターネットで多くの解決策を読みました。途中、かなり寄り道もしたので、困っている友達と共有するために、私なりの解決策をもとに記事を書いてみようと思いました。そのため、この記事では主に、Ubuntu での MySQL の中国語文字化け問題の解決方法に関する関連情報を紹介します。困っている友達は参考にしてください

最近 Django を勉強したところ、MySQL データと組み合わせてデータを挿入するときに次の問題が発生しました:

/usr/local/lib/python2.7/dist-packages/Django-1.11.dev20170117002028-py2.7.egg
/django/db/backends/mysql/base.py:109: Warning: Incorrect string value: '\xE6\x88\x90\xE5\x8A\x9F...' 
for column 'json' at row 1
 return self.cursor.execute(query, args)
[07/Feb/2017 12:15:21] "GET /index/ HTTP/1.1" 200 250
ログイン後にコピー

に中国語を挿入できません。 MySQL データベース~! ~! データベースのエンコーディングを確認してください

mysql> show create database bangjob;
+----------+--------------------------------------------------------------------+
| Database | Create Database    |
+----------+--------------------------------------------------------------------+
| bangjob | CREATE DATABASE `bangjob` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー

データベースのエンコーディングを変更してください

mysql> show variables like'%char%';
+--------------------------+----------------------------+
| Variable_name | Value  |
+--------------------------+----------------------------+
| character_set_client | utf8  |
| character_set_connection | utf8  |
| character_set_database | latin1  |
| character_set_filesystem | binary  |
| character_set_results | utf8  |
| character_set_server | latin1  |
| character_set_system | utf8  |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
ログイン後にコピー
この時点で挿入を続けても問題ありません

本当に簡単な場合は、MySQL を再起動すると作成者の設定が無効になるため、引き続き他の方法を探します

mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
ログイン後にコピー

my.cnf ファイルの対応するノードに情報を追加します。 次に、MySQL を再起動します:

mysql> show variables like'%char%';
+--------------------------+----------------------------+
| Variable_name | Value  |
+--------------------------+----------------------------+
| character_set_client | utf8  |
| character_set_connection | utf8  |
| character_set_database | utf8  |
| character_set_filesystem | binary  |
| character_set_results | utf8  |
| character_set_server | utf8  |
| character_set_system | utf8  |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
ログイン後にコピー

再起動できる場合は、データベースのエンコーディングを再度確認します:

sudo gedit /etc/mysql/my.cnf
ログイン後にコピー

これが真実であれば、素晴らしいことですが、物事は想像しているほど単純ではありません:

再起動したときMySQL サービスでは、常に待機状態であることがわかりました ステータス

(PS: デッドロックか何かが発生したと思われます)、この時点で

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
ログイン後にコピー

を実行すると、例外

がスローされます:

/etc/init.d/mysql start
ログイン後にコピー

Iコーディングを変更したいだけなのですが、なぜそんなに難しいのですか->->->->->!!!多くの方法(再起動、復元)を試しました

mysql> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name   | Value      |
+--------------------------+----------------------------+
| character_set_client  | utf8      |
| character_set_connection | utf8      |
| character_set_database | utf8      |
| character_set_filesystem | binary      |
| character_set_results | utf8      |
| character_set_server  | utf8      |
| character_set_system  | utf8      |
| character_sets_dir  | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
ログイン後にコピー
のステータスを確認してください。 mysql: mysql respawn/post-start、(post-start) process 55665

これらのメソッドでは問題を解決できません。ログから始めましょう...

ファイル /var を見つけます/log/mysql/error.log

続行 エラー 2002 (HY000): ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できません (2) の解決策を見つけます。 コード>。

答え:

mysql respawn/post-start, (post-start) process 55665

这些方式不能解决问题,还是从日志开始吧…

找到日至文件 /var/log/mysql/error.log

继续找ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)的解决办法。

答案:

[ mysqld ] 下的 default-character-set=utf8' 改成character_set_server=utf8

好了,终于可以重启MySQL了,并且重启后设置的编码依旧生效。

当然之前创建的数据库需要重新创建T_T

因为 show create database bangjob;

[ mysqld ] default-character-set=utf8' character_set_server=utf8 に変更します

さて、ようやく MySQL を再起動できます。設定したエンコーディングは再起動後も有効です。

もちろん、以前に作成したデータベースを再作成する必要があります T_T🎜🎜🎜 なぜなら、show create database bangjob; は、以前に作成されたデータ エンコーディングがまだ latin1 であることを示しているからです🎜🎜🎜概要🎜🎜

以上がUbuntu環境のMySQLで中国語が文字化けする問題の解決方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!