MySQL 文字セットの変更に関する実践的なチュートリアル

MySQL 文字セットの変更に関する実践的なチュートリアル

序文:

MySQL では、システムが多くの文字セットをサポートしており、異なる文字セット間にはわずかな違いがあります。現在最もよく使われている文字セットは、utf8 と utf8mb4 です。utf8 と比較すると、utf8mb4 は絵文字表現の保存をサポートしており、用途が広くなっています。この記事では、utf8 を utf8mb4 文字セットに変更する方法を紹介します。

1. utf8 および utf8mb4 文字セットの概要

文字とは、国語の文字、句読点、図記号、数字など、さまざまな文字や記号の総称です。文字セットは複数の文字の集合です。

MySQL の文字セットは、サーバー レベル、データベース レベル、テーブル レベル、列レベルの 4 つのレベルで使用できます。サーバー レベルの比較ルールは、character_set_server パラメータによって制御されます。データベース、テーブル、または列の作成時に文字セットが明示的に指定されていない場合は、前のレベルの文字セットが継承されます。

MySQL 5.7 以前のバージョンのデフォルトの文字セットは latin1 であり、MySQL 8.0 のデフォルトの文字セットは utf8mb4 です。ただし、latin1 を使用すると文字化けが発生しやすくなるため、utf8 と utf8mb4 が最も広く使用されています。 utf8 は実際には utf8mb3 の別名であり、文字を表すために 1 ~ 3 バイトのみを使用します。 utf8mb4 は 1 ~ 4 バイトを使用して文字を表し、より多くの絵文字表現や新しい Unicode 文字を保存できます。 utf8mb4 は utf8 と互換性があり、utf8 よりも多くの文字を表現できます。これは utf8 文字セットのスーパーセットです。そのため、一部の新しいビジネスでは、特に絵文字を保存する必要がある場合に、データベースの文字セットを utf8mb4 に設定することを推奨しています。

2. 文字セット方法を変更する

現在のインターネットビジネスでは、絵文字の保存に対する需要が高まっています。たとえば、ニックネームやコメントは絵文字をサポートする必要があります。このとき、データベースフィールドが utf8 文字セットを使用している場合、次のエラーが報告されます。

java.sql.SQLException: 列の文字列値が正しくありません: '\xF0\x9F\x92\x95\xF0\x9F...'…………

ビジネス ニーズを満たすには、データベースの文字セットを utf8mb4 に変更する必要があります。幸い、utf8mb4 は utf8 のスーパーセットなので、エンコードを utf8mb4 に変更する以外に変換は必要ありません。変更方法について簡単に説明します。

システムパラメータの変更

まず、将来作成されるデータベース テーブルのデフォルトの文字セットが utf8mb4 になるように、システム文字セット パラメータを変更する必要があります。構成ファイルを見つけて、次のパラメータを追加または変更します。

vi /etc/my.cnf

[mysqld]
文字セットサーバー = utf8mb4
照合サーバー = utf8mb4_general_ci
文字セットクライアントハンドシェイクをスキップする
#アプリケーション接続によって設定された文字エンコーディングを無視し、グローバル設定 [クライアント] と一貫性を保ちます
デフォルトの文字セット=utf8mb4
[mysql]
デフォルトの文字セット=utf8mb4

データベースの文字セットを変更する

すでに作成されているデータベースの場合、元の文字セットが utf8 であれば、次のように変更できます。

# データベースの文字セットエンコーディングを設定します。 ALTER DATABASE `dbname` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

# 例mysql> show create database testdb;
+----------+-----------------------------------------------------------------+
| データベース | データベースの作成 |
+----------+-----------------------------------------------------------------+
| testdb | CREATE DATABASE `testdb` /*!40100 デフォルト文字セット utf8 */ |
+----------+-----------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

mysql> データベース `testdb` を変更し、文字セットを utf8mb4 に変更し、UTF8MB4_general_ci に照合します。
クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> show データベース testdb を作成します。
+----------+--------------------------------------------------------------------+
| データベース | データベースの作成 |
+----------+--------------------------------------------------------------------+
| testdb | CREATE DATABASE `testdb` /*!40100 デフォルト文字セット utf8mb4 */ |
+----------+--------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

テーブルとフィールドの文字セットを変更する

同様に、すでに作成されているテーブルの場合、グローバル文字セットとデータベース文字セットを変更しても、元のテーブルとフィールドの文字セットには影響しません。元の utf8 テーブルは次のように変更できます。

# テーブルの文字セットを変更します。 alter table `tb_name` default character set utf8mb4;

# フィールドの文字セットを変更します。 alter table `tb_name` modify col_name varchar(20) character set utf8mb4;

# テーブルとフィールドの文字セットを同時に変更します。 alter table `tb_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

# データベースにテーブルが多数ある場合は、実行するバッチ変更ステートメントを結合することができます SELECT
 CONCAT( 'ALTER TABLE ', TABLE_NAME, ' 文字セット utf8mb4 に変換 COLLATE utf8mb4_general_ci;' ) 
から
 情報スキーマ.`TABLES` 
どこ
 TABLE_SCHEMA = 'testdb';

3. いくつかの提案

変更方法は簡単に思えますが、実稼働環境では特に注意する必要があります。特に、フィールドの文字セットを変更する場合、書き込み操作を防ぐためにロックが追加されます。これも大きなテーブルでは非常に遅くなり、オンライン ビジネスに影響を与える可能性があります。

データベースが比較的小さい場合、上記の方法は問題にならないはずです。オンライン環境では、文字セットを変更する場合は、十分な評価を行う必要があります。変更は業務の閑散期にシステムをシャットダウンして行うのが最善であり、変更前には必ずバックアップを取ってください。ダウンタイムがない場合は、最初にバックアップ データベースに変更を加えてから、プライマリ データベースとバックアップ データベースを切り替えることも検討できますが、これはより面倒になります。

条件が許せば、空のインスタンスを準備し、最初にテーブル構造をインポートし、それを utf8mb4 文字セットに変更してからデータをインポートすることもできます。これも 1 つの方法ですが、ダウンタイムと切り替えが必要になる場合もあります。

上記は、MySQL の文字セットを変更する方法の詳細です。MySQL の文字セットの変更の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL の文字セットとデータベース エンジンの変更方法の共有
  • MySQL 文字セットの表示と変更のチュートリアル
  • MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復
  • Linux 上の MySQL 5.5/5.6 で文字セットのエンコーディングを UTF8 に変更する方法
  • MySQLデータベースでサポートされているストレージエンジンの比較
  • MySQL をベースにしたシンプルな検索エンジンを実装する
  • MySQL のストレージ エンジンの違いと比較
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQLはデフォルトのエンジンと文字セットの詳細を変更します

<<:  proxy_pass を設定した後に Nginx が 404 を返す問題を解決する

>>:  新しい CSS display:box プロパティの詳細な説明

推薦する

MySQLクエリデータを時間別に表示します。データがない場合は0を入力してください。

需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...

MySQLプロセスを安全かつ適切にシャットダウンする方法

序文この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安...

ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

クーパー氏は、一般的に上から下、左から右に向かうユーザーの視覚経路について話しました。優れたビジュア...

Windows Server 2008R2 ファイル サーバーを Windows Server 2016 にアップグレードする

ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...

有名なブログの再設計例 28 件

1. Webデザイナーウォール 2. Veerleのブログ 3. チュートリアル9 4. UXブース...

Mysql5.7でのスケジュールバックアップの実装

1. MySQL インストール パス D:\xxx\MYSQL\MySQL Workbench CE...

Remレイアウトを使用して適応性を実現する

以前、モバイル適応に関する記事を書きました。非常に長く、内容が多すぎて読みづらいものでした。そこで、...

Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します

Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...

Ubuntu 18.04 で中国語入力方法を設定する方法

Ubuntuの最新バージョンでは、ユーザーは中国語入力方法を別途ダウンロードする必要がなくなりました...

Vue+webrtc (Tencent Cloud) ライブブロードキャスト機能の実装実践

目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

Reactはtodolistの追加、削除、変更、クエリを実装します

目次ToDoリストを例に挙げましょうディレクトリは次のとおりですアプリ入力.jsリスト.jsアイテム...

フロントエンドにアニメーション遷移効果を実装する方法

目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...

Linuxのlocateコマンドの使い方

01. コマンドの概要実際には、locate コマンドは find -name の別の書き方ですが、...

ローカルで起動したときに Vue プロジェクトがクッキーを保持できない問題を解決する

vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...