MySQL 5.7 to 8.0: Default Character Set Becomes utf8mb4

Why new tables and databases created without an explicit CHARSET clause get a different default character set on MySQL 8.0 than on 5.7.

MySQL 5.7 → MySQL 8.0

Quick answer

MySQL 8.0's server default character set is utf8mb4 (with utf8mb4_0900_ai_ci collation); MySQL 5.7's default was latin1. Any CREATE TABLE/DATABASE statement that omits an explicit CHARACTER SET clause gets a different result depending on which server version created it.

Why it matters

This mostly helps — utf8mb4 correctly stores full Unicode (including emoji) where latin1 cannot — but it means schema dumps, migration scripts, and ORMs that don't pin an explicit charset can produce tables with different encodings depending on when/where they were created, which complicates later consolidation.

What to do about it

Migration steps

  • Always specify CHARACTER SET and COLLATE explicitly in CREATE TABLE/DATABASE statements rather than relying on the server default, regardless of MySQL version.
  • Before upgrading, audit existing latin1 tables that hold non-ASCII data and plan an explicit conversion (ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4) rather than assuming the server upgrade changes existing table data.

References

  • MySQL 8.0 Reference Manual — Character Set Configuration (v8.0) — checked 2026-07-31
  • MySQL 8.0 Reference Manual — Changes Affecting Upgrades to MySQL 8.0 (v8.0) — checked 2026-07-31

Last verified 2026-07-31.