Какую кодировку выбрать для базы чтобы можно было сохранять строки на любом языке и не парить себе мозг?
Сделал миграцию
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
Добавил модель, передаю post данные с кириллицей, save() отрабатывает, но латиница в базу попадает, а от кириллицы пустое место... боюсь предположить, что будет если кто-то напишет на арабском, китайском или хинди. Что делать?
Стоит везде выставить utf8mb4_unicode_ci (работает точнее при сортироваках и проч.) или utf8mb4_general_ci (чуть быстрее работает, крайне незначительно, так что имеет смысл именно первый вариант).
P.S. Указанные выше utf8_general_ci/utf8_unicode_ci поддерживают лишь половину диапазона utf8, отсюда сохранение, например эмодзи, будет физически невозможным.
P.P.S. Суффикс "ci" означает Case Insensitive (нечувствителность к регистру при поиске и сравнении).
Александр Синицын, можно, конечно. Но есть один небольшой нюанс - при использовании кодировки, рассчитанной под весь стандарт (а не на огрызок, как текущий utf8) объём данных уменьшается. Т.е. varchar 255 позволит записать 191 символ в utf-8mb4: https://dev.mysql.com/doc/refman/5.7/en/charset-un...
Нормальная у Вас кодировка, utf8_unicode_ci так же подходит для кириллицы. Может что то происходит во время декодирования json или пользуетесь строковыми функциями без приставки mb_