Кодування Utf8mb4 у MySQL

Incorrect string value: \xF0\x9F\x91\x8A\xD0\xA7...У вас така ж помилка? Ось ви і знаєте причину втрати інформації при збереженні у кодуванні Utf8, яке не зберігало символи, що не поміщаються в 3 байти.Для усунення помилки необхідно зробити кілька змін. Але насамперед необхідно перевірити версію бази даних. Для цього виконуємо код:
$mysqli = new mysqli("host", "username", "password");
echo mysqli_get_server_info($mysqli);Якщо версія нижче 5.5.3, необхідно оновити версію сервера MySQL.Обов’язково створіть резервні копії всіх баз даних!
Почнемо з кодування бази даних:
ALTER DATABASE <database> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Наступною дією необхідно змінити кодування таблиці:ALTER TABLE <database>.<table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Стовпці типу TEXT змінюються на MEDIUMTEXT, а стовпці MEDIUMTEXT замінюються на LONGTEXT.
Також можна змінювати кодування окремих стовпців:
ALTER TABLE <database>.<table_name> MODIFY <column_name> TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Кодування utf8mb4 використовує 4 байти на символ, замість 3 як було в uft8. Але при конвертації довжина в байтах для стовпця чи індексу залишається незмінною. Наприклад, тип TEXT може зберегти 64КБ. Якщо кожен символ зберігає 3 байти, у цей тип може поміститися 21845 трибайтних символів. Відповідно, якщо кожен символ займає 4 байти, максимально допустимо 16383 чотирибайтні символи. З цього випливає, що ви не зможете записати в дане поле більше 16383 символів після конвертації. Якщо вам потрібно зберігати більше символів, необхідно змінити тип поля на MEDIUMTEXT.Також в конфігураційних налаштуваннях сервера змініть наступні налаштування:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci 