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 プロパティの詳細な説明

推薦する

CSS3 における擬似クラスの一般的な使用法の詳細な説明

before/after 疑似クラスは、要素内に 2 つの追加タグを挿入するのと同じです。最も適した...

MySQL 8.0.11 圧縮版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0圧縮パッケージのインストール方法、詳細は次のとおりです知らせ:オペレーティング シ...

React クラスコンポーネントのライフサイクルと実行順序

1. Reactコンポーネントを定義する2つの方法1. 関数コンポーネント。単純な関数コンポーネント...

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

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

親要素に対する CSS 子要素の配置の実装

解決親要素に position:relative を追加します。子要素に position:abso...

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

JavaScript の Set データ構造の詳細な説明

目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...

MySQL MHA 操作ステータス監視の概要

目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...

MySQL インデックス プッシュダウンを 5 分で理解する

目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...

Vue ボタンの権限制御の導入

目次1. 手順1. ボタンの権限を定義する2. ストアを定義する3. 権限指示を作成する4. パーミ...

MySQL 5.7.10 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...

Vue で手ぶれ補正とスロットリングを使用する方法

目次序文コンセプト安定意味使用シナリオコードVueでの使用スロットリング意味使用シナリオコードVue...

CSS3+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

では、早速レンダリングを見てみましょう。 コア コードはtransition: cubic-bezi...

Vueはユーザー名が使用可能かどうかの検証を実装します

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...

JS でオブジェクトを作成する 4 つの方法

目次1. リテラル値でオブジェクトを作成する2. 新しいキャラクターを使ってオブジェクトを作成する3...