sql >> データベース >  >> RDS >> Mysql

MySQLUTF8からUTF8MB4への移行の問題と質問

    1. INDEXのサイズには制限があります。 utf8mb4には最大4バイトが必要なため、制限にぶつかりました。 文字ごと 、utf8に必要なのは3つだけです。一方、INDEXのサイズ制限はバイトです。 。

    「解決策」は、特大のインデックスをどうするかを決めることです。 (以下で詳しく説明します)

    2.

    ALTER TABLE t CHANGE col col ...
    

    より論理的なものと同じです

    ALTER TABLE t MODIFY col ...
    

    前者では列の名前を変更できるため、名前を変更する必要がない場合は、列名のコピーが2つあります。

    1. VARCHAR(255)を持っている可能性が非常に高いです これはutf8で767バイトを使用します(3 * 255 + 2;「2」は長さフィールドのサイズです)。 4バイトのutf8mb4に相当するものは、(191)(4 * 191 + 2 =766; 191を超える余地はありません)です。

    2. 私はそれについての記事を見たことがありません。私が今言ったことは、言わなければならないことのほとんどだと思います。

    だから...

    計画Afoo VARCHAR(255)はありますか そしてそれはutf8でしたか?その中のデータは常に(現在および将来)191文字より短いですか?その場合は、ALTERを実行してください。

    計画B :191以上が必要な場合、本当にINDEXが必要ですか? DROPINDEXが代わりになるかもしれません。

    計画C :または、「プレフィックス」インデックスを使用できます:INDEX(foo(191)) 、そのままにしてVARCHAR(255) 。通常、「プレフィックス」インデックスは役に立ちませんが、可能性があります それが機能するユースケースがあります。

    これについてさらに議論するには、SHOW CREATE TABLEを提供してください 問題のテーブルについて、その特定のフィールドとそのINDEXの意味について話し合います。



    1. 2つのテーブルをマージするMySQLの単一ステートメント

    2. ExecuteNonQuery:接続プロパティが初期化されていません。

    3. Hibernateでの不要なクエリ-MySql

    4. SQLサーバーでクエリ結果を選択するためにシーケンスの「startwith」を設定するにはどうすればよいですか?