MySQL’s utf8 encodes at most three bytes per character. Real UTF-8 needs four for anything above the basic plane, which is where emoji and a good deal of CJK live — so inserting one either errors or silently truncates the rest of the string.
ALTER DATABASE shop
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE reviews
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
The migration has a trap: utf8mb4 needs four bytes per character where utf8 needed three, and an index is limited to 767 bytes, so a VARCHAR(255) that was indexable at 255×3 no longer is at 255×4. Either shorten the column to 191, or enable innodb_large_prefix with the DYNAMIC row format. The connection charset has to change too, or the client hands over three-byte data regardless.