Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mysqlが絵文字に対応していない #77

Open
kujiy opened this issue Mar 30, 2016 · 5 comments
Open

mysqlが絵文字に対応していない #77

kujiy opened this issue Mar 30, 2016 · 5 comments

Comments

@kujiy
Copy link

kujiy commented Mar 30, 2016

こちらで対応していただいたコードを見て気付いたのですが、mysqlの文字コードが utf8_general_ci のようです。
これはスマホから絵文字を投稿されるとサービスが止まってしまう文字コードですので、 utf8mb4_general_ci にする必要があるかと思います。(MySQL, MariaDB

対応する場合は、ここらへん をmysqlのバージョンに合わせて書き換えればいいでしょうか。

既存システムはどうすればいいかな。変換する方法はあるようですが、こういった場合はどう対応するのがxoops流でしょうか。まずは新規システムだけでも対応したいところです。

@nao-pon
Copy link
Member

nao-pon commented Mar 31, 2016

あまり詳しくないので教えて下さい。
サービスが止まってしまうということは、どのようなことでしょうか?

utf8_unicode_ci なサイトでスマホから d3forum に絵文字を投稿してみたところ、絵文字だけがカットされた状態でした。

@nao-pon
Copy link
Member

nao-pon commented Mar 31, 2016

利用可能であれば utf8mb4 にしておけば下位互換性を保ちつつ、4バイト文字も扱えるという認識でよろしいでしょうか?

@hamaco
Copy link

hamaco commented Apr 1, 2016

utf8からutf8mb4にすると微妙に互換性がないので、100%問題がないかって言われるとあれな気がします。
まあ、ほぼほぼ問題ないと思いますが。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.11 以前の Unicode サポートから現在の Unicode サポートへのアップグレード

utf8_unicode_ci なサイトでスマホから d3forum に絵文字を投稿してみたところ、絵文字だけがカットされた状態でした。

ぶっちゃけどうでもよいけど、これって絵文字だけじゃなくて、絵文字以降全部カットされたような記憶が。

@nao-pon
Copy link
Member

nao-pon commented Apr 1, 2016

@hamaco ありがとうございます。なんかややこしそうですね。モジュールによってどのようなテーブル定義・構造にしているか分からないので、insert 時にカラム定義を見て4バイトに対応していない場合は、4バイト文字のみ除去するのがいいように思います。

メモ

$textwithout4byte = preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $textwith4byte);

ref. http://m.designbits.jp/12072410/

追記
カラム毎に照合順序を確認するのはちと大変そうなので、テーブル単位でいいかな?

追記その2
バイナリデータの場合もあるので、単純に4バイト文字除去するわけにはいきませんね。

@kujiy
Copy link
Author

kujiy commented Apr 19, 2016

大変遅くなり申し訳ございません。記憶がおぼろげなんですが、何かのモジュールで投稿後真っ白になった気がします。いずれにしてもスマホファーストの時代ですので絵文字が出せないのはなんとかしたいですね。(将来的に若い開発者が入ってこなくなってしまいます)

4バイト文字のみ除去はいい方法だと思います。

できれば userテーブル のような問題もありますし、mysql側の更新については一気に移行させてしまうフローをこれを機に作って、以降の面倒を見なくてもいいようにできたらいいかもしれないですね。(最近のサービスはリリースと一緒に移行ツール自動発火が多いですし)

  1. 管理画面にmysql移行の案内文を表示
    • xupdateでも表示
  2. backup取って移行しちゃうツールを叩かせる(yes/no付き?自動発火?)
  3. 移行に問題あったらissueで報告し、みんなでなんとかしてフィードバック
  4. 次回からmysqlの変更も楽ちんに

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants