myslqは、データベース・レベル、テーブル・レベル、列レベル文字セットエンコーディングに設けてもよいです。
優先順位:データベース・キャラクタ・セット<文字セットテーブル<列の文字セット。
すなわち、被写体の小さな範囲を設定するために、上記の3つの文字セットの一貫性のないレベルです。
例:データベースのデフォルトの文字セットは、表が自動的にエンコーディングutf8mb4を設定している場合、UTF8ケースUTF8文字セットは、テーブルを設定しないで、次にutf8MB4のためのテーブルの上にエンコードする文字セット。
、データ格納失敗鉛蓄電池与えられた後、珍しい言葉があるでしょうので、私はテーブルのutf8 utf8mb4変更からのデータのほとんどを決めたので、二つの質問を考えるようになりました。
転送フィールド長後テーブル255を設定する最大長を超えている場合、トランスコーディングテーブルは、コード変換テーブルが成功しない1、データが正常にまたは異常になり、図2に示すように、コード変換、バイト長変更元の通常の文字メモリ255をもたらすことができるが正しく元の一部を防ぐ格納されていない今格納された長さがストレージに短くなり、フィールドデータを格納することができます。
その後、答えを得るために、テストを通じて - 全く効果が。
最初のポイント。MySQLバージョン5.0以上、ためのvarchar(255)、255は文字を指し、最大65532バイト;従ってVARCHAR(255)はこの制限は、これ以上のバイトの最大数よりも、それに影響されないにもかかわらず、文字セットを変更します。
第二の点:テーブルを変更するには、文字セット、彼らは(新しいキャラクタセットが格納されているとするかどうか)は、既存のデータを更新するかどうかを選択することができ、またはのみ(処理せずにデータを既存の)データの後に挿入時に有効になります。
次のようにステートメントは、次のとおりです。
1あなたは、テーブルの文字セットを変更し、既存のデータを更新する前に、あなたは3つのレコードを見ることができます変更した後、既存の影響を受け、(あなたが照合増加の背後に設定する必要がある場合はCOLLATE照合 することができます)
表ALTER TABLE_NAMEの SETの文字に変換 新しい文字セット。
2文字セットは、テーブルに変更されますが、既存のデータは更新されませ前に、あなたが見た後に、影響を受けた行動0を変更することができます。(あなたが照合増加の背後に設定する必要がある場合はCOLLATE照合 することができます)
表ALTERは、TABLE_NAMEのSET CHARACTERにDEFAULTを 新しい文字セット。