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

推薦する

Vue はグラフィック検証コードログインを実装します

この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介し...

仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...

div+cssとウェブ標準ページの利点

div 要素は、HTML ドキュメント内のブロックレベル コンテンツの構造と背景を提供するために使用...

SQL Server 2019 Always On クラスターの Docker デプロイメントの実装

目次Docker デプロイメント Always on クラスターDockerをインストールする建築関...

Nginx Rewriteモジュールを使用するいくつかのシナリオ

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

JavaScript+html はフロントエンドページでランダム QR コード検証を実装します

クールなフロントエンドページのランダムQRコード検証を参考までに共有します。具体的な内容は次のとおり...

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...

ユニアプリとミニプログラム(画像とテキスト)を下請けする方法を教えます

目次1. ミニプログラム下請け2. Uniapp 下請けアプレット下請けの手順: 1. manife...

HTML マルチメディア アプリケーション: Web ページにフラッシュ アニメーションと音楽を挿入する

1. HTML_falshアニメーションでのマルチメディアの応用(WebページへのFlashアニメー...

openlayers6 マップオーバーレイの一般的な 3 つの用途 (ポップアップウィンドウマーカーテキスト)

目次1. 前に書く2. ポップアップウィンドウを実装するためのオーバーレイ2.1 vueページのad...

docker-compose を使用して Apollo カスタム環境をデプロイする詳細なチュートリアル

目次アポロ コンフィギュレーション センターとは何ですか?アポロの特徴クライアントアーキテクチャアー...

Mysqlサーバーのインストール、構成、起動、シャットダウン方法の詳細な説明

1. 公式サイトからダウンロード: https://dev.mysql.com/downloads/...

vue3.0 で要素を使用するための完全な手順

序文: vue3.0の要素フレームワークを使用します。要素はvue2.0をサポートしており、vue3...

JS の toFixed() メソッドの丸め精度の問題の詳細な説明

目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...

MySQL 学習ノート ヘルプ ドキュメント

システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...