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

推薦する

美しいHTMLコードの書き方

美しい HTML コードの外観 美しい HTML コードの書き方。外国人が書いた記事: 美しい HT...

MySql データベースにリモートでログインするにはどうすればよいですか?

はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...

ホームページのデザインはウェブデザイナーのレベルを最もよく反映する

私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...

CentOS6.5 でファイル共有サービス Samba を構築するチュートリアル

Samba サービス:このコンテンツはサンバサービス学習者の参考用ですケースの説明:企業の管理者は、...

Webpack5-react スキャフォールディングをゼロから構築するための実装手順 (ソースコード付き)

目次ウェブパック5公式スタート建築ガイド構築を開始する依存する準備が完了したら、プロジェクトの構築を...

Nginx は高可用性クラスタ構築を実装します (Keepalived+Haproxy+Nginx)

1. コンポーネントと実装機能Keepalived: Haproxy サービスの高可用性を実現し、...

Tomcatはスレッドプールを使用してリモート同時リクエストを処理します。

Tomcatが同時リクエストを処理する方法を理解することで、スレッドプール、ロック、キュー、および...

CSS3で作成した画像スクロール効果

成果を達成する実装コードhtml <base href="https://s3-us...

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...

jQueryで大画面スクロール再生効果を実現

この記事では、大画面スクロール効果を実現するためのjQueryの具体的なコードを参考までに紹介します...

WeChatアプレットはウォーターフォールフローのページングスクロール読み込みを実装します

この記事では、WeChatアプレットのウォーターフォールフローページングスクロールロードを実装するた...

js ドラッグ アンド ドロップ テーブルでコンテンツ計算を実現する

この記事の例では、コンテンツの計算を実現するためのjsドラッグアンドドロップテーブルの具体的なコード...

document.getElementBy系メソッドがオブジェクトを取得できない問題を解決する

getElementByIdはオブジェクトを取得できませんブラウザがドキュメントを解析するときにはシ...

Kubernetes (k8s) 入門

Kubernetes は面白そうだったので(ギリシャ人なら名前に問題があると思うでしょうが)、ずっと...

HTML テーブルタグチュートリアル (46): テーブルフッタータグ

<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...