Наступил на грабли. В PHP UTF - это нормальный UTF, который подразумевает весь диапазон символов, в том числе четырехбайтовую часть. В MySQL/Maria UTF - нечто убогое, что четырехбайтовую часть не учитывает. Т.е. если хотите запихивать какие-то расширенные смайлики через старонаписанный софт, необходимо использовать кодировку не utf8, а utf8mb4. Чистая жесть. Вижу пока только один способ это сделать - приводить символы расширенного диапазона к entities. Пока, перегуглив тонну всякого, сделал это так
Код:
$text = preg_replace_callback('/[\x{10000}-\x{10FFFF}]/u', function ($m) {
$char = current($m);
$utf = iconv('UTF-8', 'UCS-4', $char);
return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $text);