2017-08-25 7 views
0

私は、中国語の名前をデータベースに格納する必要があるMySQLを使用してアプリケーションを構築しています。私は基本的なutf8エンコーディング(Basic Multilingual Planeでのみ動作し、UTF-8エンコーディングで最大3バイトの文字を格納する)を使用するかどうかを判断しようとしています。 utf8mb4エンコーディングであり、より高いプレーンからの文字をエンコード/格納することを可能にする。中国語の名前とUnicode Basic Multilingual Plane(BMP)

すべての中国固有の名前を格納するのに十分なUnicode Basic Multilingual Plane(BMP)はありますか?

答えて

0

TL; DRこれは重要ではなく、特に新しいアプリケーションの場合は、utf8mb4エンコードを使用してください。

長い形式の回答:2つのエンコーディングの主な違いは、MySQLでサポートされている長さで、長さが最大3バイトのUTF8エンコード文字をサポートすることです。 @ rick-jamesが指摘するように、新しいエンコードであるutf8mb4では5.5.3以降、この制限が緩和され、それ以外の場合には欠点はありません。

MySQL documentationによれば、新しいutf8mb4符号化は、この任意の3文字の制限を持ち上げ、そして任意欠点場合、いくつかある:

  • BMP文字、utf8utf8mb4については、同一の記憶特性を有します:同じコード値、同じエンコーディング、同じ長さ。
  • 補助文字の場合、utf8は文字をまったく格納できませんが、utf8mb4は4バイトを格納する必要があります。 utf8は文字をまったく格納できないため、utf8列に補助文字がなく、古いバージョンのMySQLからデータをアップグレードする際に、文字の変換やデータの損失について心配する必要はありません。

このように、私の元の質問を誤解した中国名の各文字をエンコードするバイト数の最大値は、限り、あなたが使用してエンコードが実際にすべてのUnicodeコードポイントをエンコードするサポートとしてを問題ではないはず。

+1

欠点は、インデックスの767バイトの制限(5.7まで)です。複数の回避策があります。 –

1

MySQLのCHARACTER SET utf8は、3バイトのUTF-8コード(BMP)のみを処理します。代わりに、すべての4バイトコードを処理するCHARACTER SET utf8mb4を使用します。はい、現在定義されている中国語、絵文字などのすべてのUnicodeが含まれます。

実際にはバージョン5.7を使用してください。

+0

この質問の私の元の意図は、中国語名がUnicode BMP以外の文字をサポートする必要があるかどうかを理解することでした。これは3バイトの最大utf8エンコーディングでのみサポートされています。そのような疑問は、緑地のアプリケーションの場合と同様に、utf8mb4エンコーディングから始めて、文字が同じ量のスペースを取ってくるのを見ても全く問題がないように思われます。 –

+1

中国語にはBMP以外の文字がいくつかあります。 –

関連する問題