А вместо идентификаторов вроде ":smile:" проще использовать настоящие эмодзи из юникода https://unicode.org/emoji/charts/full-emoji-list.html
Но при этом учесть, что в mysql для этого придётся изменить кодировку поля на utf8mb4, ибо тамошняя реализация utf8 позволяет хранить символы до 0xFFFF
Потому что utf8_general_ci - это не кодировка, это сравнение (collation). Кодировка в данном случае - utf-8, сверху в вашем выпадающем списке присутствует.
Возможно, эти объекты сами протекают. Попробуйте ради эксперимента создать в цикле множество экземпляров объекта, сделать с ними те же действия, что в функции, затем удалить их. Замерить память перед созданием объектов и после их удаления.
Для разметки документа используется HTML, для описания внешнего вида (размеров, цветов, шрифтов) элементов - CSS, а для действий и интерактивности на странице - JS
Проще всего на стороне БД отфильтровать, особенно если выставить индекс на поле, по которому происходит фильтрация. Индексы помогают не считывать с диска всю таблицу, а только нужные строки, попадаемые под критерий, а операция считывания с диска одна из самых тяжёлых со стороны сервера.
Я загружаемые юзерами файлы обычно называю по sha1 от содержимого, заодно и дедупликация получается в том случае, если два раза будет загружен один и тот же файл.
Причём хэш от файла просчитываю перед загрузкой ещё и на клиенте, чтобы можно было отловить дубликат, не загружая сам файл (на сервере обязательно хэш перепроверить, ибо клиент может намеренно солгать).
Зависит от того, какой Document resolution. Выбирается в Image->Image size или при создании документа. Чтобы 1px = 1pt, должно быть 72 пикселей/дюйм, если не ошибаюсь.