10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


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

10.1.11以前のUnicodeサポートから現在のUnicodeサポートへのアップグレード

このセクションでは,古いMySQLリリースからMySQL 5.6にアップグレードするときに起きる可能性のある,Unicodeサポートに関する問題について説明します。また,MySQL 5.6から古いリリスにダウングレドするためのガドランも示します。

ほとんどの点でMySQL 5.6にアップグレードしても,Unicodeの使用法について問題が生じることはほとんどありませんが,非互換性の可能性のあるいくつかの領域があります。主な対象領域は次のとおりです。

  • 可変長文字デタ型(VARCHAR型と文本型)の場合,文字の最大長は,utf8mb4カラムのほうがuse utf8カラムよりも短くなります。

  • すべての文字デタ型(字符型、VARCHAR型,および文本型)で,化学键ンデックスを付けることができる文字の最大数は,utf8mb4カラムのほうがuse utf8カラムよりも少なくなります。

このため,use utf8からutf8mb4にテーブルをアップグレードして補助文字サポートを利用する場合,一部のカラムまたはインデックス定義を変更する必要が生じることがあります。

テ,ブルは,ALTER TABLEを使用することにより,use utf8からutf8mb4に変換できます。テ,ブルがもともと次のように定義されていたとします。

CREATE TABLE t1 (col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, col2 CHAR(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL) CHARACTER SET utf8;

次のステ,トメントは,utf8mb4を使用するようにt1を変換します。

ALTER TABLE t1 DEFAULT CHARACTER SET utf8mb4, MODIFY col1 CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, MODIFY col2 CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;

テブルの内容にいては,use utf8からutf8mb4への変換で問題は起こりません。

  • BMP文字の場合,use utf8utf8mb4のストレ,ジ特性は同一で,コ,ド値,エンコ,ディング,長さが同じです。

  • 補助文字にいては,use utf8はこの文字をまったく格納できませんが,utf8mb4は文字の格納に4バescトを必要とします。use utf8はこの文字をまったく格納しないので,use utf8カラムには補助文字がなく,use utf8データを古いバージョンのMySQLからアップグレードするときに,文字の変換やデータの損失について心配する必要はありません。

テブル構造にいては,use utf8からutf8mb4への変換時に,カラムまたはバereplicationトの点では変更されないという問題が生じます。そのため,文字の最大長が3ではなく4なので,文字の点ではこれはより小さくなります。字符VARCHAR,および文本デ,タ型の場合,MySQLテ,ブルを変換するときに,次の点に注意してください。

  • use utf8カラムのすべての定義を調べて,それらがストレ,ジエンジンの最大長を超えていないことを確認します。

  • use utf8カラムのすべてのインデックスを調べて,それらがストレージエンジンの最大長を超えていないことを確認します。最大値は,ストレ,ジエンジンの機能強化によって変更されることがあります。

前述の条件が当てはまる場合は,カラムまたはutf8mb4ではなくuse utf8を使用し続ける必要があります。

次に,構造的な変更が必要な例をいくか示します。

  • 非常小的文本串255年カラムは,最大バイトを保持できるので,3バイトの文字は85個まで,4バイトの文字は63個まで保持できます。use utf8を使用する非常小的文本串カラムがあるが,63個以上の文字を含められることが必要だとします。デ,タ型も文本などのより長い型に変更しないかぎり,これをutf8mb4に変換できません。

    同様に非常に長いVARCHARカラムは,use utf8からutf8mb4に変換する場合は,より長い文本型のいずれかに変更する必要があります。

  • InnoDBには,紧凑的または冗余行フォマットを使用するテブル用に767バトの最大ンデックス長があり,use utf8またはutf8mb4カラムの場合,それぞれ最大255または191個の文字にescンデックスを付けることができます。現在,e - mailンデックスが191個の文字より長いuse utf8カラムがある場合,电子邮件ンデックスを付ける文字数を減らす必要があります。

    紧凑的または冗余行フォ,マットを使用するInnoDBテブルでは,次のカラムおよびンデックス定義が有効です。

    VARCHAR(500) CHARACTER SET utf8, INDEX (col1(255))

    代わりにutf8mb4を使用するには,电子邮件ンデックスをより小さくする必要があります。

    VARCHAR(500) CHARACTER SET utf8mb4, INDEX (col1(191))
    注記

    压缩または动态行フォ,マットを使用するInnoDBテ,ブルの場合,innodb_large_prefixオプションを有効にすると,767バ安大安大市トより長いンデックスキ,プリフィクス(最大3072バaapl .ト)を許容できます。このようなテ,ブルの作成には,innodb_file_format =梭鱼およびinnodb_file_per_table = trueのオプション値も必要になります.)この場合,innodb_large_prefixオプションを有効にすると,use utf8またはutf8mb4カラムに対しそれぞれ最大1024または768個の文字にescンデックスを付けることができます。関連情報にいては,セクション14.6.7 " InnoDBテブル上の制限"を参照してください。

前述の変更のタイプは,非常に長いカラムまたはインデックスを持つ場合にのみ必要になる可能性が高くなります。それ以外の場合は,use utf8からutf8mb4に問題なくテーブルを変換できます。これを行うには,5.6に適切にアップグレードしたあとで,このセクションですでに述べたようにALTER TABLEを使用します。

次の項目は,非互換性の可能性のあるほかの領域にいてまとめたものです。

  • 4バesc escトのutf-8 (utf8mb4)のパフォマンスは,3バトのutf-8 (use utf8)のパフォ,マンスより低下します。このペナルティ,を望まない場合は,use utf8を引き続き使用してください。

  • SET NAMES 'utf8mb4'では,接続文字セットに対して4バ议席トの文字セットを使用する必要があります。4バト文字がサバから送信されていないかぎり,問題は起こりません。それ以外の場合は,文字ごとに最大 3 バイトの受信を要求するアプリケーションで問題が発生する可能性があります。反対に、4 バイトの文字の送信を要求するアプリケーションは、その文字がサーバーで認識されることを確認する必要があります。

  • アプリケ,ションは,utf16utf16le,またはutf32文字デ,タを認識しない古いサ,バ,にこれらのデ,タを送信できません。

  • レプリケーションでは,補助文字をサポートする文字セットがマスターで使用される場合,すべてのスレーブでもこれらの文字を認識する必要があります。MySQL 5.6マスタ,から古いスレ,ブに複製しようとしたときに,use utf8デ,タはスレ,ブでuse utf8と認識され,正しく複製されます。ただし,utf8mb4utf16utf16le,またはutf32デ,タは送信できません。

    また,テーブルにマスターとスレーブについて異なる定義がある場合,予想外の結果を招くことがあるという一般的な原則に留意してください。たとえば,use utf8を使用し,スレ,ブでutf8mb4を使用することは危険です。

MySQL 5.6にアップグレードしてあり,古いリリースにダウングレードすることにした場合,次の考慮事項が該当します。

  • ucs2およびuse utf8デ,タで問題が生じていない必要があります。

  • utf8mb4utf16utf16le,またはutf32文字セットを参照するすべての定義は,古いサ,バ,で認識されません。

  • utf8mb4文字セットを参照するオブジェクト定義の場合,データ内に4バイト文字が存在しないかぎり,MySQL 5.6で, mysqldumpを使用してこれらをダンプし,utf8mb4の@ @ンスタンスをuse utf8に変更するようにダンプファルを編集し,このファルを古いサバにリロドできます。古いサ、バ、は、ダンプファ、ルオブジェクト定義内のuse utf8を認識し,(3バトの)use utf8文字セットを使用する新しいオブジェクトを作成します。