𝗠𝗶𝗴𝗿𝗮𝘁𝗶𝗼𝗻 𝘃𝗼𝗻 𝗠𝗮𝗴𝗲𝗻𝘁𝗼 𝟮 𝘃𝗼𝗻 𝘂𝘁𝗳𝟴 𝘇𝘂 𝘂𝘁𝗳𝟴𝗺𝗯𝟰

Ein Kunde verwendete ein Emoji in seinem Namen. Die Datenbank hat den Namen direkt nach dem Emoji abgeschnitten. In den Logs erschien kein Fehler.

Das Problem ist MySQL utf8. Es ist kein echtes UTF-8. Es gibt ein Limit von drei Bytes.

Emojis und viele moderne Symbole benötigen vier Bytes. Wenn Sie das alte utf8 verwenden, kürzt MySQL Ihre Daten. Dies geschieht geräuschlos, wenn Ihr SQL-Modus nicht im Strict-Modus ist. Sie verlieren Daten, ohne es zu merken.

Die Lösung ist utf8mb4. Es unterstützt vier Bytes pro Zeichen.

Bei einem großen Magento-Store können Sie nicht einfach einen Konvertierungsbefehl ausführen. Sie werden wahrscheinlich auf einen Fehler stoßen. Die Fehlermeldung besagt, dass Ihr Key zu lang ist.

Dies geschieht, weil MySQL die Indexgröße basierend auf den maximal möglichen Bytes berechnet. Eine VARCHAR(255)-Spalte verbraucht in utf8 765 Bytes. In utf8mb4 benötigt dieselbe Spalte 1020 Bytes. Dies überschreitet das alte Limit von 767 Bytes.

So beheben Sie das:

  • Verwenden Sie MySQL 8.0 oder MySQL 5.7 mit aktiviertem innodb_large_prefix. Dies erhöht Ihr Limit auf 3072 Bytes.
  • Wenn Sie einen alten Server verwenden, reduzieren Sie indizierte VARCHAR-Spalten auf 191 Zeichen. 191 Zeichen mal 4 Bytes ergibt 764 Bytes. Das passt innerhalb des Limits.

Eine erfolgreiche Migration erfordert drei Schritte:

  1. Aktualisieren Sie die Datenbank und die Tabellen. Verwenden Sie ALTER TABLE CONVERT TO CHARACTER SET utf8mb4. Dies schreibt die vorhandenen Daten neu.
  2. Aktualisieren Sie die Server-Standardeinstellungen in Ihrer my.cnf-Datei. Dies stellt sicher, dass neue Tabellen die korrekten Einstellungen verwenden.
  3. Aktualisieren Sie den Zeichensatz der Anwendungverbindung. Wenn die Verbindung auf utf8 bleibt, werden die Daten beschädigt, bevor sie die Datenbank erreichen.

Achten Sie auf diese Risiken:

  • Tabellensperren (Table locks). CONVERT TO schreibt die gesamte Tabelle neu. Große Tabellen werden gesperrt. Verwenden Sie Tools wie pt-online-schema-change, um Ihren Store online zu halten.
  • Collation-Fehlanpassungen (Collation mismatches). Alle verknüpften Tabellen müssen dieselbe Collation verwenden. Verwenden Sie utf8mb4_unicode_ci für Ihr gesamtes Schema.

Wenn Sie immer noch utf8 verwenden, ist Ihr Store nicht Unicode-sicher. Sie warten nur darauf, dass das falsche Zeichen Ihre Daten beschädigt.

Quelle: https://dev.to/iamrobindhiman/migrating-a-magento-2-store-from-utf8-to-utf8mb4-without-losing-data-khn