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で子プロセスを作成する方法

推薦する

1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...

面接で聞かれる可能性のあるCSSに関する質問

この記事は、100 回書かれ、質問された CSS の質問を記念するためのものです。聞く: CSS セ...

dockerでマウントされたディレクトリが読み書きできない問題を解決する

次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...

MySQL の replace と replace into の詳細な例 into_Mysql

MySQL の replace と replace into はどちらも頻繁に使用される関数です。...

JavaScript Proxyオブジェクトの詳細な説明

目次1. プロキシとは何ですか? 2. 使い方は? 1. プロキシを使用する簡単な例2. 対象オブジ...

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

1.これは1. 誰が誰に電話をかけますか?例: 関数foo(){ console.log(&quo...

バックアップ データをインポートするときに innodb_index_stats がエラーを報告する場合の主キー競合の解決方法

障害の説明percona5.6、mysqldump フルバックアップ、バックアップデータのインポート...

HTML 選択タグにおける単一選択と複数選択の詳細な説明

select 要素は、単一選択または複数選択のメニューを作成します。フォームが送信されると、ブラウザ...

Linux 構成で MySQL データベースへのリモート接続が失敗する問題の解決方法

今日は、Linux でリモート アクセス用に MySQL データベースを構成する方法について質問があ...

CentOS7 ファイアウォールとオープンポートの簡単な使い方の簡単な紹介

概要(公式にはより詳しい説明があります) Firewalld は、ネットワーク接続またはインターフェ...

JS 非同期実行の原則とコールバックの詳細

1. JSの非同期実行の原則JavaScript はシングルスレッドですが、ブラウザはマルチスレッド...

MySQLビューの原理と使用法の詳細な説明

この記事では、例を使用して MySQL ビューの原理と使用方法を説明します。ご参考までに、詳細は以下...

MySql で正規表現クエリを使用する方法

正規表現は、特定のパターンに一致するテキストを検索および置換するためによく使用されます。たとえば、テ...

Red Hat Enterprise Linux 8 をベースにした CentOS 8 が正式にリリースされました

CentOS プロジェクトは、Red Hat の再配布要件に完全に準拠した、Red Hat Ente...