The "utf8" mode in MySQL can only encode 3 bytes of data (up to 16 bit codepoints), which is less than 4 (less than 21 bit codepoints).
"utf8mb4" correctly encodes all UTF-8 codepoints by current standards.
Yes, all good and known, but not really what the misunderstanding is about.
"utf8" follows the definitions of UTF-8 as they stood at the time, adhering to Unicode's former code space limit.
The "utf8" mode in MySQL can only encode 3 bytes of data (up to 16 bit codepoints), which is less than 4 (less than 21 bit codepoints).
"utf8mb4" correctly encodes all UTF-8 codepoints by current standards.