web-dev-qa-db-ja.com

MySQLデータベースをlatin1からutf8mb4に変換します-ドイツのウムラウトを処理します

私は5.6.28 MySQL Community Serverを使用してホストしていますWordPress + CentOS 6.7 Linuxサーバーでドイツ語のProPhotoブログ:

mysql> show tables;
+-----------------------+
| Tables_in_blog        |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
11 rows in set (0.00 sec)

その後、最近、私はロシア語のアプリの開発を開始し、MySQLの設定を/ etc/my.cnftf8mb4 エンコーディングに変更する必要がありました。

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

今私は最初のデータベースにまだ小さな問題があり、それはまだlatin1として表示されています:

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | latin1                     | HOW TO CONVERT?
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

latin1データベースをutf8mb4に変換する最良の方法は何ですか?

そして、ドイツ語のウムラウト文字(ä ö ü)プロセスで正しく変換されますか?

6

ここでは2つの考えられる質問があり、2つの異なる答えがあります-

新しいテーブルをすべてutf8mb4にする方法

これは、データベースの作成中に(1つのデータベースに対して)実行できます。

CREATE DATABASE dbname
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE       utf8mb4_unicode_ci;

データベースをALTERすることができます(同様の構文)が、futureテーブルのdefaultのみを提供します。

「サーバー」変数からの継承に関連するバグがあります: http://dev.mysql.com/worklog/task/?id=3811 なので、各データベースで明示的にすることをお勧めします。

既存のlatin1テーブルを変換するにはどうすればよいですか

latin1として宣言されたテーブルがあり、latin1バイトが正しく含まれていて、すべてのchar/text列をutf8 ...に変更したい場合.

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;

これにより定義が変更され、列の必要なバイトがアクティブに変更されます。

ALTER TABLE tbl MODIFY col1 ... CHARACTER SET utf8mb4;

上記に似ていますが、一度に1つの列のみが機能し、MODIFY句で正確なものが必要です。したがって、これはかなり退屈な作業です。ただし、一部の列のみを変更する場合に便利です。

10
Rick James