Всем привет. У меня в таблице не сохрняются символы emoji, я почитал, что мне нужно установить кодировку utf8mb4, вместо utf8 которая используется сейчас.
В связи с этим у меня появилось несколько вопросов.
1. Правильно ли я сделаю, если установлю кодировку utf8mb4 только в тех столбцах, которые должны хранить символы emoji?
2. Сейчас по умолчанию php использует кодировку соединения с БД - utf8, что мне нужно сделать, установить по умолчанию utf8mb4 для соединения с БД или перед каждым запросом предусматривающим кодировку utf8mb4, менять соединение с БД на лету?
3. Какие есть подводные камни для использования кодировки utf8mb4, в частности не влечет ли она какую-то неправильную работу с обычными utf8 символами?
Алексей Коновалов, переход с utf8 на utf8mb4 безболезненный. Только в обратную сторону будут сложности.
Еще нужно учитывать, что помимо emoji можно писать иные непечатаемые символы. Такое, например, может случиться из-за всякого рода копипасты контент-менеджера из какого-нибудь экселя.
A N, У меня приложение android/iOS пользователи частенько любят вставить смайлик посреди написанного текста, но если этот смайлик не поддерживается базой данных, то весь текст после него обрезается
Недавно тоже заставлял БД хранить Emodji. Сделал так:
1. сменил кодировку таблицы на utf8mb4_general_ci
2. сменил кодировку необходимого поля таблицы на utf8mb4_general_ci
3. сменил кодировку php соединения с БД: $mysqli->set_charset('utf8mb4');
Полет нормальный, никаких подводных камней не обнаружено.
А кодировку соединения изменили общую, для всех таблиц, не зависимо от того utf8 или utf8mb4?
Ну т.е. вы не переключаете кодировку на лету перед вставкой данных в таблицу utf8mb4?