Ubuntu 上の MySQL における中国語文字化け問題の解決方法

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: 警告: 行 1 の列 'json' の文字列値 '\xE6\x88\x90\xE5\x8A\x9F...' が正しくありません
 self.cursor.execute(クエリ、引数) を返します。
[2017/02/07 12:15:21] 「GET /index/ HTTP/1.1」 200 250

中国語はMySQLデータベースに挿入できません〜! ~!

データベースのエンコーディングを表示

mysql> show データベース bangjob を作成します。
+----------+--------------------------------------------------------------------+
| データベース | データベースの作成 |
+----------+--------------------------------------------------------------------+
| bangjob | CREATE DATABASE `bangjob` /*!40100 デフォルト文字セット latin1 */ |
+----------+--------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)
mysql> '%char%' のような変数を表示します。
+--------------------------+----------------------------+
| 変数名 | 値 |
+--------------------------+----------------------------+
| 文字セットクライアント | utf8 |
| 文字セット接続 | utf8 |
| 文字セットデータベース | latin1 |
| 文字セットファイルシステム | バイナリ |
| 文字セット結果 | utf8 |
| 文字セットサーバー | latin1 |
| 文字セットシステム | utf8 |
| 文字セットディレクトリ | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
セット内の行数は 8 です (0.00 秒)

データベースのエンコーディングを変更する

mysql> character_set_database=utf8 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> character_set_server=utf8 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

変更された結果を表示する

mysql> '%char%' のような変数を表示します。
+--------------------------+----------------------------+
| 変数名 | 値 |
+--------------------------+----------------------------+
| 文字セットクライアント | utf8 |
| 文字セット接続 | utf8 |
| 文字セットデータベース | utf8 |
| 文字セットファイルシステム | バイナリ |
| 文字セット結果 | utf8 |
| 文字セットサーバー | utf8 |
| 文字セットシステム | utf8 |
| 文字セットディレクトリ | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
セット内の行数は 8 です (0.00 秒)

現時点では挿入を続行しても問題ありません。

MySQL を再起動すると、このような変更は無効になるため、それほど単純であれば良いでしょう。 ! !

他の方法を探し続ける

sudo gedit /etc/mysql/my.cnf

my.cnf ファイル内の対応するノードに次の情報を追加します。

[クライアント]
デフォルトの文字セット=utf8
[mysqld]
デフォルトの文字セット=utf8
[mysql]
デフォルトの文字セット=utf8

次に、MySQL を再起動します。

/etc/init.d/mysql を起動します

再起動できる場合は、データベースのエンコーディングを再度確認してください。

mysql> 「%char%」のような変数を表示します。
+--------------------------+----------------------------+
| 変数名 | 値 |
+--------------------------+----------------------------+
| 文字セットクライアント | utf8 |
| 文字セット接続 | utf8 |
| 文字セットデータベース | utf8 |
| 文字セットファイルシステム | バイナリ |
| 文字セット結果 | utf8 |
| 文字セットサーバー | utf8 |
| 文字セットシステム | utf8 |
| 文字セットディレクトリ | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
セット内の行数は 8 行 (0.01 秒)

本当にこうだったらいいのですが、物事は私たちが想像するほど単純ではありません。

MySQL サービスを再起動すると、常に待機状態になっていることがわかりました (追記: デッドロックか何かが発生したと思われます)。このとき、以下を実行します。

mysql -u ルート -p

例外がスローされます:

エラー 2002 (HY000): ソケット '/var/run/mysqld/mysqld.sock' 経由でローカル MySQL サーバーに接続できません (2)

コードを変更したいだけなのに、なぜこんなに難しいのでしょうか?

この問題を解決するためにさまざまな方法(再起動、復元)を試しました。 。 。 。 。

sudo /etc/init.d/mysql ステータス

mysql のステータスを確認します: 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;は、以前に作成されたデータがまだlatin1でエンコードされていることを示している。

要約する

上記がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションを取ることができます。

以下もご興味があるかもしれません:
  • MySQL にテーブルデータを挿入するときに中国語の文字化けが発生する問題を解決する方法
  • Linux 上の Tomcat で MySQL にデータを挿入するときに中国語の文字化けが発生する問題を解決する
  • JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明
  • MySQL データベースにおける中国語文字化け問題の詳細な説明
  • CMD で MySQL データベースを操作するときに中国語の文字化けが発生する問題の解決方法
  • サーブレットが MySQL にデータを追加するときに中国語が文字化けする問題を解決する方法
  • Mysql5.7 で中国語の文字化けの問題を解決する
  • JSP MySQL にデータを挿入するときに中国語の文字化けが発生する問題の解決方法
  • Mac Mysql データベースの中国語文字化け問題の解決方法
  • MYSQL の解凍版における中国語の文字化け問題の解決方法

<<:  nginx ロードバランシングを介して https にリダイレクトする方法

>>:  Node.jsで子プロセスを作成する方法

推薦する

Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

MySQL ウィンドウ関数の紹介MySQL は MySQL 8.0 以降、ウィンドウ関数をサポートし...

要素テーブルの多層ネスト表示の実践

複数の注文を含むリストが必要です。各注文は一意にすることも、複数の注文を結合することもできます。各注...

CSSは、マウスを線の上に置くと線全体の色を変える効果を実現します。

まとめ:以下のように、CSS で指定した行にマウスを置いたときに行全体の色を変更する方法を示します。...

MySQLの連結関数CONCATの使い方の詳しい説明

前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...

MySQL は制限を使用してページング例メソッドを実装します

1. 制限の基本的な実装一般的に、クライアントは、pageNo (ページ番号) と pageSize...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

JS の compose 関数と pipe 関数の使い方の詳細な説明

目次作成機能配列プロトタイプの削減Array.prototype.reduceRightパイプ関数作...

Linux の vsftpd サービス構成の簡単な分析 (匿名、ユーザー、仮想ユーザー)

vsftpd の概要vsftpd は「very secure FTP daemon」の略称で、セキ...

Mysql5.6.36 スクリプトのコンパイル、インストール、初期化のチュートリアル

概要この記事は、centos7.3 上で mysql5.3.6 を自動的にコンパイルしてインストール...

ftp は SSH 経由で Linux にリモート接続します

まず Linux に ssh をインストールします。例として Centos を使用します。ポータル:...

MySQLスローログクエリの詳細な説明

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

MySQL ステートメントロックの実装の分析

概要: 2 つの MySQL SQL ステートメント ロックの分析次のSQL文にどのようなロックが追...

表のセルの内容が超過した場合に省略記号効果を表示する(実装コード)

例示するフロントエンド開発では、セルの幅を制限し、コンテンツが制限を超える部分に省略記号を表示する必...

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

Vue はクリックフリップ効果を実現します

参考までに、vueを使用してクリックフリップエフェクトを簡単に実装します。具体的な内容は次のとおりで...