Чому utf8 в MySQL не підтримує emoji
MySQL реалізував utf8 як 3-байтовий, що не покриває emoji (4 байти). utf8mb4 — справжній 4-байтовий UTF-8 з повною підтримкою Unicode та emoji.
Налаштування my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4Зміна кодування існуючої бази даних
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Налаштування в PHP (PDO)
$pdo = new PDO(
'mysql:host=localhost;dbname=mydb;charset=utf8mb4',
'user', 'password'
);При оновленні з
utf8 на utf8mb4 перевірте, що індекси VARCHAR не перевищують 767 байт.