utf8 in MySQL is not UTF-8; utf8mb4 is

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.