Ubuntu

MySQLのキャラクターセット確認メモ

Redmineを導入しようと考えていて、インストールについて教えてくれるところを探していたら、

Redmineのデータベースの文字コードは「utf8mb4」を利用しようと思います。

そのためには多少の設定変更が必要ですが、後で可愛い彼女(そんなものはいない)に「カレシのRedmine、絵文字使えなくてさぁ~」なんて言われるよりかは数億万倍マシなので頑張って下さい。

※引用 Ubuntu 16.04(またはRaspbian)にRedmineをインストールする

「可愛い彼女」で、そうか自分じゃ使わないけどblogやメールとかに絵文字って使うかもしれないなーと気付いて、ちょっと見てみると、Wordpressなんかは、必要なところをutf8→utf8mb4に変えちゃってるみたい。いままでdefault-character-setをutf8で設定してきたけれども、それはどうなのか?と気になって[キャラクターセットを調べる方法]をメモにしてみた。

広告


■デフォルトのキャラクターセットを調べる

mysql>SHOW VARIABLES LIKE "chara%";

※参照 mysqlで文字コードをutf8にセットする

■データベースのキャラクターセットを調べる

mysql>SHOW CREATE DATABASE データベース名;

※参照 MySQL 逆引きリファレンス

■テーブルのキャラクターセットを調べる

mysql>SHOW TABLE STATUS FROM データベース名;

※参照 SOFTELメモ

■データベースのバックアップを取る

mysqldump --default-character-set=utf8mb4 -u root -p -x --all-databases > mysqldump.sql
mysqldump --default-character-set=utf8mb4 -u root -p データベース名 > mysqldump.sql

 

消して復元できることを試す状況にないからまだ試していないが、こんなところではないかと。

※参照1 MySQLのバックアップ/復元(ダンプ/インポート/dump/import) 基本コマンド メモ ※参照2 mysqldumpでデータベースをバックアップする


いままで、こんな感じに使ってきたわけですが…

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

※参照 MYSQL 文字コード確認

そもそも、データベースにおけるデフォルトキャラクターセットとは何なのか。mysqlをmanで見てみた。default-character-setのところをgoogle先生に翻訳してもらうとこんな感じに。

--default-character-set=charset_name

 charset_nameをクライアントと接続のデフォルトの文字セットとして使用します。

 このオプションは、オペレーティングシステムが1つの文字セットを使用し、mysqlクライアントがデフォルトで別の文字セットを使用する場合に便利です。この場合、出力形式が正しくない可能性があります。
 通常、このオプションを使用してクライアントにシステム文字セットを強制的に使用させることで、このような問題を解決できます。

 詳細は、11.1.4項「接続文字セットと照合順序」および11.5項「キャラクタ・セット構成」を参照してください。

 

参照先をちょろちょろと見てつらつら考えてみて… サーバーはデフォルトでこのキャラクターコードを利用するとして、クライアントのデフォルトが何か、必要なら個別にキャラクターセットを設定しているか?というところが文字化けする・しないの分岐点になるんじゃないかと想像。

実際どうなんだろ? WordPressについては恐らく問題ないことでしょう。

Kopanoは?

  • Googleアカウントから携帯で絵文字を入力して送信→Kopano WebAppで正しく表示される。
  • これをKopano WebAppでそのまま返信→sent itemで見ると送信の時点で一部絵文字がなくなり、当然Googleアカウント側にも表示されない。
  • ケータイからそのまま返信→Googleアカウントでも問題なく表示される。

と、なった。

現状、Openmeetingsなんかも運用しており、これにはutf8mb4とかなさそうなので、デフォルトキャラクターセットを変えるのは無理っぽい。Redmineについてはデーターベースのデフォルトキャラクターセットをutf8mb4にして試してみよう…ちょっと不安だけど。

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他