MySQL5.5、utf8mb4 の使用について - PHPプロ!Q&A掲示板

4064

  • 0P

MySQL5.5、utf8mb4 の使用について

質問日時 / 2013年6月18日 16:25    回答数 / 6件

Questioner:  noko11  このエントリーをはてなブックマークに追加 

キーワード / utf8mb4    4バイト文字    文字化け   

お世話になっています。

現在、PHPでShift-JIS のサイトを UTF-8 に変更するため、ローカルでテスト中です。
MySQL5.5 でutf-8 のデータベースも作りました。
照合順序はutf8_general_ciです。
PCページの方は、データの登録・データの表示 すべてうまくいきました。

携帯サイトの方は、まだauが対応していないと言うことで
Shift-JISのままということになりました。
エンコード等でほとんどの場合、携帯からの登録もデータ表示もうまくいきました。
ところが、4バイト文字だけはやはり文字化けします。
「~」 と言う字は、携帯から登録すると、管理ページやphpMyAdmin から見るとギザギザでした。
ということはやはり4バイト文字はきちんと登録できていないということですね?

utf-8サイト のフォームからの登録だときれいな 「~」が入っていました。が
携帯サイトから表示させると「?」になっています。

MySQL5.5から、utf8mb4 という型が利用できると知りました。


このサイトでは、精々、「~」「ー」が出てくる程度なのでデータ置換で対応する
べきか、悩んでいます。もしくは迷わず、utf8mb4にすればよいのでしょうか?
他に問題が出てくると時間がなくなってしまいそうで・・・。

お手数ですが、よろしくお願いいたします。

MySQL 5.5
PHP 5.2.17

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimixutf8mb4が使える環境(5.5.3以降)であれば、utf8mb4
 ┣A01-1noko11早々と回答いただきありがとうございます。 そうです
 ┣A01-2noko11一応、結果のご報告です。バイナリの扱い方がよくわか
 ┃┗A01-2-1shimix>utf8mb4_general_ciとutf8_general_ciの違いは、どの
 ┃ ┗A01-2-1-1noko11何度も申し訳ありません。 【Shift-JIS ページ】
 ┗A01-3noko11遅くなりましたが・・・ 「波ダッシュ (U+301C, WA

回答一覧

並び替え:

A01 参考になった
answerershimix [6月18日 17:29]

utf8mb4が使える環境(5.5.3以降)であれば、utf8mb4を使えばいいと思います(使えて困るものでもないので)。

#せっかくの「待望の」機能ですからね


ただし

>「~」 と言う字は、携帯から登録すると、管理ページや
>phpMyAdmin から見るとギザギザでした。

が「3バイトまでしか扱えないから」起こった事象なのかどうかは「どういうデータがPOSTされたのか」をバイナリで調べないと判断出来ません(元々のマッピングが崩れているので・・・)。

http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5

この意見に回答する

ツリーへ TOPへ

A01-1
replyernoko11 [6月19日 11:19]

早々と回答いただきありがとうございます。
そうですね。結局、決断力がなくて困ってしまいます^^

さくらインターネットMySQL 5.5x までしか分からないのですが
携帯版もシュミレーターでしか検証していないので、
さくらの試作環境で utf8mb4 で設定してみます。

この意見に回答する

ツリーへ TOPへ

A01-2
replyernoko11 [6月20日 14:44]

一応、結果のご報告です。バイナリの扱い方がよくわからなかったもので^^;

utf8mb4_general_ci
utf8_general_ci

ふたつのデータベース(テーブル)で検証してみました。


「~」← 「から」から変換して入力する日本語 について
-----------------------------------------------------------------
●utf-8 のページからの 登録・更新・表示 ほとんど意識することなく文字化けなし。
メール送信も文字化けなし。


●Shift_JIS のページからの登録  
エンコードのタイミング等色々変えてやってみたが、やはり、phpMyAdminからの表示でちょっとギザギザに見える

Shift_JISページでのデータの表示 ← mb_convert_encodingmb でOK。
Shift_JIS のページからの登録したギザギザデータも この方法で、きれいに表示できました。

メール送信も文字化けなし。実際の携帯からも問題なし。
-----------------------------------------------------------------

結局、どちらの照合順序でも結果は全く同じでした。

utf8mb4_general_ciとutf8_general_ciの違いは、どのような場面で出てくるんでしょうか? これからは、皆、utf8mb4_general_ciへシフトしていくんでしょうか?

たびたび申し訳ございません。お時間があればよろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-2-1
replyershimix [6月20日 17:15]

>utf8mb4_general_ciとutf8_general_ciの違いは、どのような場面で出てくるんでしょうか?

4バイト文字を扱えるかどうかの違いです。本来であれば(旧データとの互換さえ確保出来ていれば)utf8のデフォルトがutf8mb4になってもおかしくはなかったと思います。


なお、波ダッシュ問題などは4バイト云々とは無関係です。SJIS/UTF8のマッピングの問題なので。今のところ個別対応しかないと思いますが、前述のとおり文字がどうこうでなく「どういうバイナリなのか」をキチンと把握して対応しないといけません。

この意見に回答する

ツリーへ TOPへ

A01-2-1-1
replyernoko11 [6月21日 12:50]

何度も申し訳ありません。

【Shift-JIS ページ】

◆登録する時

POST で受信したデータのバイナリコードは

100000010110000

$sql=mb_convert_encoding($sql,"UTF-8","SJIS"); 
インサート。


◆呼び出して表示するとき

mb_convert_encoding( $row['title'], 'Shift_JIS', 'UTF-8'  );

1000000101100000

登録する時のコードが1桁足りませんね。
保存するときに何かするべきことがまだありますか?

今のところ、utf8,Shift-JISぺージ 両方とも表面上は問題なく使えていますが・・・

この意見に回答する

ツリーへ TOPへ

A01-3
replyernoko11 [6月26日 11:58]

遅くなりましたが・・・

「波ダッシュ (U+301C, WAVE DASH) が環境によっては、「」や「?」などへ文字化けを起こす機種依存文字となってしまっている。」ですね。
ギザギザになっているのは、phpmyadminの表示方法では正しく表示しきれてないだけ。

utf8かutf8mb4かは全然関係ない話ということですね。

アドバイスどおり、データベースはutf8mb4で構築することにしました。
もっと基本的なことを勉強しないといけませんね。
どうもありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)