質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

4回答

14015閲覧

utf8mb4への移行は必須だと思いますか?

zico_teratail

総合スコア907

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

2クリップ

投稿2016/12/30 09:32

編集2016/12/30 14:13

MySQLにてutf8mb4に全面移行するかどうか迷っています。

だいたい調べた限りでは、絵文字や中国語などを扱う際にutf8mb4だと何かと都合がいいようです。
ですが私の場合は今まで3バイトのutf8で困った場面がありませんでした。

・今後新規に作るデータベースは全てutf8mb4にすべきか
・過去のものも全てutf8mb4に変換しておくべきか

以上二点で悩んでいます。
デメリット(たとえばインデックス長の制限が短くなる等)も一応あるようなので、従来のutf8のままで行くかどうか決めかねています。

皆さんのお考え・ご意見をお聞かせください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自分はユーザが文章を投稿するサイトでutf8をutf8mb4に移行した経験があります。
理由は絵文字を投稿された場合に、DBに保存する際に、絵文字以降の文章が削除されてしまうからです。
絵文字や中国語などを扱うことが想定されていないシステムならわざわざutf8mb4にする必要はないと思います。

ただし、混乱を避けるために、すべてのシステムでutf8mb4に統一しておくのはいいかもしれませんね。

投稿2016/12/30 09:51

編集2016/12/30 11:10
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zico_teratail

2016/12/30 11:32

ありがとうございます。 デメリット(インデックス長やデータサイズ肥大等)についてはどう思いますか。
popobot

2016/12/30 23:05 編集

> デメリット(インデックス長やデータサイズ肥大等)についてはどう思いますか。 インデックス長は場合によっては、影響が大きいかもしれませんね。自分の場合は、idにはint(11)を使っているケースがおおかったですが、varchar(255)のインデックスがあれば、191に減らす必要があると思います。 https://dev.mysql.com/doc/refman/5.6/ja/charset-unicode-upgrading.html データサイズ肥大化はそれほど問題視していませんでした。varcharなどは実際の文字分だけ保存するので、そこまで大きな変化はないと思います。もちろんcharなどは増えます。(システムにもよるので検証時に確認すればいいと思います)
guest

0

(1)utf8mb4 のデータを入力しようとしたらエラーを表示し、入力できないように
しているかがキチンとできていないとutf8のままにはできないと思います。
(2)しかしながら、WEB(UTF仕様)で表示できていても、WINDOWSのシフトJISに変換
しようとすると変換不能文字になってしまうのは残念ながら避けることはできません。
ただ、0.01%未満なので目をつぶることはできるでしょう。
utf8(3バイト)の範囲ですら変換不能文字や不可逆変換文字は存在します、波ダッシュ~やハイフン等)
現時点では長短併せ持つので、採用するかしないかの決定的な客観的要因はないと思います。
世の中の趨勢により(グローバル化で)各国独自文字を使う傾向があるのでいずれはUTF8mb4に移行して
いくことは間違いないと個人的には考えています。

投稿2017/01/05 19:00

km668

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zico_teratail

2017/01/05 23:03

貴重なご意見ありがとうございます。 参考になります。
guest

0

icchiiさんがおっしゃっていますが、自分も文字コードを調べたときに「携帯電話キャリアー固有の絵文字がutf8mb4でないと化ける」という記事を見かけました。

ご質問をみて日本語を想定したとき4バイトになる文字には何があるんだろうと改めて検索してみたら「MySQLの文字コード事情」なるページが見つかりました。これには以下が挙げられてるようです。

  • JIS X 0213の中では第三水準以降の一部
  • キャリアー固有絵文字に代表される絵文字(多数)

第三水準以降の一部の文字については使用する頻度が少ないでしょうがあえて切り捨てるのではなく含めておく方が無難であろうというのは誰しも考えると思います。第二水準までしか用いないという明確な基準があれば別だと思いますが。また「絵文字をどうしたいか?」の方は場合によっては漢字の問題よりも強い動機になりそうな気がします。

投稿2016/12/30 11:26

編集2016/12/30 13:44
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zico_teratail

2016/12/30 11:32

ありがとうございます。 デメリット(インデックス長やデータサイズ肥大等)についてはどう思いますか。
KSwordOfHaste

2016/12/30 11:50

自分の場合は要件がそれを必要とするならutf8mb4とするが第二水準まででよいという明確な仕様があるならutf8にしておくという判断かなと思います。デメリットについては「utf8でいいはずだが念のためutf8mb4にしておく」といった場合に考えることだと思いますが、そういう機会がなかったので調べたことがなく残念ながらコメントできる知識がないです。もしそうした機会ができたなら実際に性能やDBサイズの比較をしてみると思います。
guest

0

ベストアンサー

システムリプレース時には、データベース等ミドルウェアの設計の見直しもあるわけですが、質問者さんのおっしゃるようにインデクス長の変更などは重大なので、できればutf8mb4への移行は避けたいところです。

しかし個人的な経験では、日本語の漢字 (人名など) に関しては、クライアントさん側からBMP外の漢字への対応を求められたことがありません (「はしご高」のような有名(?)なものはだいたいBMP内です)。これは、異体字に対して運用で対応してきた時期が長いためと思われます (「わたなべのなべ」などはどっちみち完璧な対応は難しいですし)。中国語の漢字も同様のはずです。

ですので、新規設計でかつ、人名の漢字を正確に扱いたいとか、絵文字やヒエログリフを文字情報として格納したいというのであれば、迷わずutf8mb4を採用しますが、そうでなければutf8にしてほしいです。

投稿2016/12/30 13:07

ikedas

総合スコア4354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zico_teratail

2016/12/30 14:11

ありがとうございます。 >そうでなければutf8にしてほしい これは特別な事情がなければmb4無しのutf8のほうが(新規案件であっても)「望ましい」というご意見でしょうか? できればその理由も教えていただけますと幸いです。
ikedas

2016/12/31 02:14 編集

影響範囲はアプリを含む全てのクライアントに及びます。そのどこかで接続文字セットをutf8にしていたらデータ破損の可能性もあるわけです。 なので、みんながutf8mb4で接続してくれるということが確実に担保されるのでなければ、データベース文字セットをutf8にしておいてほしい、とおもいます。担保されるのならもちろん問題はないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問