utf8 is three bytes and utf8mb4 is the one you meant

The character set MySQL calls utf8 stores at most three bytes per character, which excludes emoji and several CJK ranges — and the failure is a truncated string rather than an error.

SHOW CHARACTER SET LIKE 'utf8%';
-- utf8     UTF-8 Unicode  utf8_general_ci      3
-- utf8mb4  UTF-8 Unicode  utf8mb4_0900_ai_ci  4

ALTER TABLE comments
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

-- and every connection, or the client re-mangles it
-- SET NAMES utf8mb4;

Without strict mode the insert silently truncates at the offending character, which loses the rest of a customer’s message and reports success. The conversion is a table rewrite, so it belongs in the schema-change process rather than in a casual migration. Index key lengths change with it — a VARCHAR(255) unique index that fit under the old limit may not under the new one on older row formats, which is the failure that stops the ALTER halfway.