sql >> Databáze >  >> RDS >> Mysql

Migrace problémů a otázek MySQL UTF8 na UTF8MB4

  1. Velikost INDEXU má omezení. Narazili jste na limit, protože utf8mb4 potřebuje až 4 bajty za znak , kde jako utf8 potřebuje pouze 3. Mezitím je limit velikosti INDEXu v bajtech .

„Řešením“ je rozhodnout se, co dělat s příliš velkým indexem. (více níže)

2.

ALTER TABLE t CHANGE col col ...

je stejný jako logičtější

ALTER TABLE t MODIFY col ...

První možnost vám umožňuje změnit název sloupce, tedy dvě kopie názvu sloupce, když nepotřebujete měnit název.

  1. Dost pravděpodobně jste měli VARCHAR(255) který zabírá 767 bajtů v utf8 (3*255+2; "2" je velikost pole délky). Ekvivalent ve 4bajtovém utf8mb4 by byl (191) (4*191+2=766; není místo pro více než 191).

  2. Neviděl jsem o tom článek. Mám podezření, že to, co jsem právě řekl, je většina z toho, co je třeba říci.

Takže...

Plán A :Máte foo VARCHAR(255) a bylo to utf8? Jsou údaje v něm vždy (nyní i v budoucnu) kratší než 191 znaků? Pokud ano, pak jednoduše proveďte ALTER.

Plán B :Pokud potřebujete více než 191, opravdu potřebujete INDEX? Alternativou může být DROP INDEX.

Plán C :Nebo můžete použít "prefix" index:INDEX(foo(191)) , zatímco ponecháte VARCHAR(255) . Obvykle jsou "prefixové" indexy k ničemu, ale můžete mít případ použití, pro který to funguje.

Chcete-li o tom dále diskutovat, poskytněte SHOW CREATE TABLE pro danou tabulku a diskutujte o významu tohoto konkrétního pole a jeho INDEXU.



  1. MySQL - Vyberte ze seznamu čísel ta, která nemají protějšek v poli id ​​tabulky

  2. Zrychlení mysql výpisů a importů

  3. Připojte se k databázi mysql přes SSH přes PHP

  4. MySQL vytváří čas a aktualizuje časové razítko