ホームページ > データベース > mysql チュートリアル > utf8 mysqlのコードが文字化けする

utf8 mysqlのコードが文字化けする

王林
リリース: 2023-05-23 09:57:37
オリジナル
986 人が閲覧しました

UTF-8 エンコーディングは現在最も広く使用されている文字エンコーディング形式であり、MySQL はデータの保存に UTF-8 エンコーディングを使用することもサポートしています。ただし、MySQL を使用して UTF-8 エンコードされたデータを保存すると、文字化けが発生する可能性があります。この記事では、MySQL で UTF-8 エンコードの文字化けが発生する原因と解決策を紹介します。

歴史的な理由により、MySQL はデフォルトで Latin1 (ISO-8859-1) エンコード形式を使用します。このエンコード形式は、ほとんどの西洋言語に適しています。しかし、アジア言語や中東言語など、複雑な文字セットを使用する言語の場合は、不十分だと思われます。

インターネット技術の発展に伴い、テキスト通信に非ラテンアルファベット文字セットを使用する国や地域が増えています。この問題を解決するために、MySQL は UTF-8 エンコード形式を導入し、MySQL がより豊富な言語テキストを保存できるようにしました。 UTF-8 (8-bit Unicode Transformation Format) エンコーディングは、Unicode 標準のすべての文字をサポートする可変長の文字エンコーディングですが、MySQL に UTF-8 エンコーディングを格納すると文字化けが発生する場合があります。

文字化けの原因と解決策:

問題 1: MySQL テーブルの CHARSET が UTF-8 形式ではありません。

テーブルの作成時に CHARSET が指定されていない場合、デフォルトでデータベースの CHARSET が使用されます。したがって、データベースの CHARSET が UTF-8 でない場合、UTF-8 エンコーディングで格納されたデータは文字化けします。

1.1 データベースの CHARSET を確認する

まず、データベースの CHARSET を確認する必要があります。次のコマンドで現在のデータベースの CHARSET を確認できます:

mysql> show create database databaseName;
ログイン後にコピー

1.2データベースの CHARSET を変更する

データベースの CHARSET が UTF-8 でない場合は、データベースの CHARSET を変更する必要があります。次の手順でデータベースの CHARSET を変更できます。

1.2.1 データベースのバックアップ

データベースの CHARSET を変更する必要があるため、データベースをバックアップする必要があります。初め。

1.2.2 データベースのデフォルトのエンコーディングを変更する

MySQL では、データベースの作成時にデフォルトのエンコーディングを指定できます。デフォルトのエンコーディングは通常、UTF-8 に設定されています。デフォルトのエンコーディングを変更する方法のデモンストレーション。

MySQL 構成ファイル /etc/mysql/mysql.conf.d/mysqld.conf を変更し、「[mysqld]」を見つけて次の内容を追加します。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
ログイン後にコピー

変更後は完了したら保存して終了します。

1.2.3 データベースとテーブルのエンコーディングの変更

MySQL では、次の SQL ステートメントを使用してデータベース、テーブル、および列のエンコーディングを表示できます:

/*查看数据库使用的编码*/
SHOW VARIABLES LIKE 'character_set_database';

/*查看数据表使用的编码*/
SHOW FULL COLUMNS FROM 表名;

/*查看列使用的编码*/
SELECT column_name, character_set_name FROM information_schema.columns WHERE table_name='表名';
ログイン後にコピー

If現在のエンコーディングは存在しません。UTF-8 を使用する場合は、データベース、テーブル、列のエンコーディングを UTF-8 に変更する必要があります。次の SQL ステートメントを使用して変更できます:

/*修改数据库编码为 utf8mb4 */
ALTER DATABASE databaseName CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

/*修改表编码为 utf8mb4*/
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

/*修改列编码为 utf8mb4*/
ALTER TABLE 表名 MODIFY COLUMN 列名 varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ログイン後にコピー

After変更が完了したら、上記のエンコード方法を再度実行して、CHARSET が UTF-8 としてエンコードされていることを確認します。

問題 2: データベース接続に UTF-8 エンコードが設定されていません

アプリケーションが MySQL データベースに接続するときは、接続文字セットを指定する必要があります。UTF-8 エンコードが設定されている場合は、設定されていない場合、UTF が読み書きされます。-8 でデータをエンコードすると文字化けが発生します。 MySQL データベースに接続するときは、次のステートメントを使用して UTF-8 エンコーディングを設定できます。

SET NAMES utf8mb4;
ログイン後にコピー

質問 3: MySQL クライアントでエンコーディングの問題が表示される

コマンド ラインを使用して SQL ステートメントを実行する場合、文字化けは主にクライアントの表示が文字化けすることが原因で発生する可能性があります。この問題は、MySQL クライアントのエンコード形式を設定することで解決できます。

3.1 Linux/MacOSX クライアントによる文字化けの解決

Linux および MacOSX システムでは、次のコマンドを使用して MySQL クライアントのエンコード形式を設定できます。完了すると、MySQL クライアントを実行し、SQL ステートメントを実行して、中国語の文字を通常どおり表示できるようになります。

3.2 Windows クライアントによる文字化けの解決

Windows システムでは、次の手順で MySQL クライアントのエンコード形式を設定できます:

[コントロール パネルを開く] -> [システムとセキュリティ] - > システム -> 詳細システム設定 -> 環境変数

環境変数で、新しいシステム変数を作成します:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
ログイン後にコピー

設定が完了したら、MySQL を実行できます。クライアントに接続して SQL ステートメントを実行すると、中国語の文字が通常どおり表示されます。

概要:

UTF-8 でエンコードされたデータを MySQL に保存すると、文字化けが発生する場合があります。コード文字化けの問題の主な理由は、テーブルの CHARSET が UTF-8 エンコード形式ではないこと、データベース接続が UTF-8 エンコードに設定されていないこと、および MySQL クライアントでエンコードの問題が表示されることです。 MySQL で CHARSET、接続文字セット、クライアントのエンコード形式を正しく設定することで、UTF-8 エンコードの文字化けの問題を解決できます。

以上がutf8 mysqlのコードが文字化けするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート