Только сейчас я столкнулся с проблемой, с которой случайно не сталкивался раньше:
Чтобы поддержать смайлики в определенных колонках, я решил установить mysqli_set_charset()
в utf8_mb4
и несколько столбцов в моей базе данных.
Теперь я столкнулся с проблемой PHP на самом деле не правильно обрабатывать символы с акцентом, поступающие из нормального utf8
закодированные поля.
Теперь я застрял с перепутавшим utf8
а также utf8mb4
Результаты. Так как моя обработка данных не очень сильна (раньше работала с фреймворками, которые обрабатывали все это для меня), я совершенно не знаю, как мне лучше всего решить эту проблему.
Я думал о следующих вариантах:
1) установить всю мою базу данных на utf8mb4
сопоставление вместо utf8
с несколькими исключениями.
2) использовать mysqli_set_charset()
чтобы изменить его, и просто убедитесь, что запросы, получающие указанные данные отделены
Теперь ни одна из них не кажется мне отличной идеей, но я не могу придумать лучшего решения.
Итак, есть оставшиеся вопросы:
utf8mb4
вместо utf8
будет большое изменение производительности? Я понимаю, что utf8mb4
больше и, следовательно, медленнее, поэтому я попытался использовать его только для рассматриваемых столбцов.utf8
хорошо кодировать, даже когда mysqli_charset
находится наutf8mb4
?Я в полном недоумении по этому вопросу и, честно говоря, не могу догадаться, какой вариант лучше. Поиск в Google не очень помог, так как он только возвращал ссылки, объясняющие различия или о том, как конвертировать вашу базу данных в utf8mb4
Поэтому я бы очень хотел услышать мысли одного из мудрых коллег!
Столбцы в этом конкретном случае:
Мой ответ, включая обнаружение кодировки символов PHP:
arri�n = UTF-8
bolsward = ASCII
go�nga = UTF-8
lo�nga = UTF-8
echt = ASCII
echteld = ASCII
echten (drenthe) = ASCII
echten (friesland) = ASCII
echtenerbrug = ASCII
echterbosch = ASCII
Моя кодировка MYSQLI:
mysqli_set_charset($this->getConn(), "utf8mb4");
— и я только что понял, что проблема была с моим mysqli_set_charset
, там действительно было подчеркивание …
Пишется utf8mb4
(без подчеркивания).
Увидеть Проблема с UTF8 символов; то, что я вижу, не то, что я храню .
В частности, прочитайте «Обзор того, что вы должны делать» в ответе.
Вам не нужно менять всю базу данных. Можно указывать utf8mb4 только для выбранных столбцов.
Вам нужно использовать utf8mb4
для связи, но вы указываете 'UTF-8'
, который является эквивалентом MySQL внешнего мира utf8mb4
, MySQL, utf8
это подмножество utf8mb4
, (Примечание: я точно использую дефисы и подчеркивания.)
utf8mb4 не больше и не медленнее для передачи символов, общих между utf8mb4 и подмножеством utf8. Эмодзи имеют 4 байта, поэтому они больше, чем большинство других символов, но вы застряли с ними на 4 байта; не парься
Других решений пока нет …