序文: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 文字セットを使用している場合、次のエラーが報告されます。
ビジネス ニーズを満たすには、データベースの文字セットを 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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: proxy_pass を設定した後に Nginx が 404 を返す問題を解決する
>>: 新しい CSS display:box プロパティの詳細な説明
需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...
序文この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安...
クーパー氏は、一般的に上から下、左から右に向かうユーザーの視覚経路について話しました。優れたビジュア...
ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...
1. Webデザイナーウォール 2. Veerleのブログ 3. チュートリアル9 4. UXブース...
1. MySQL インストール パス D:\xxx\MYSQL\MySQL Workbench CE...
以前、モバイル適応に関する記事を書きました。非常に長く、内容が多すぎて読みづらいものでした。そこで、...
Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...
Ubuntuの最新バージョンでは、ユーザーは中国語入力方法を別途ダウンロードする必要がなくなりました...
目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...
1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...
目次ToDoリストを例に挙げましょうディレクトリは次のとおりですアプリ入力.jsリスト.jsアイテム...
目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...
01. コマンドの概要実際には、locate コマンドは find -name の別の書き方ですが、...
vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...