Только сейчас, я столкнулся с проблемой, что я случайно не сталкивался раньше:Обработка смешанных utf8 и utf8mb4 Mysqli & PHP
В целях поддержки Emoji в конкретных колонках, я решил установить мой mysqli_set_charset()
в utf8_mb4
и несколько колонок, кодирующих мою базу данных.
Теперь я столкнулся с проблемой PHP на самом деле неправильно обрабатывая символы с акцентом, исходящие из нормальных utf8
закодированных полей.
Теперь я застрял в смешении utf8
и utf8mb4
. Поскольку моя обработка данных не очень сильная (используется для работы с фреймворками, которые обрабатывали все это для меня), я совершенно незнакомо с тем, как я мог бы наилучшим образом решить эту проблему.
Я думал о следующих вариантах:
1) установить всю свою базу данных для utf8mb4
сортировки вместо utf8
с некоторыми исключениями.
2) использовать mysqli_set_charset()
, чтобы изменить его, и просто убедитесь, что запросы получать указанные данные разделяются
Теперь ни один из них, кажется, как великие идеи для меня, но я не могу думать ни о каком лучшее решение ,
Итак, есть оставшиеся вопросы:
- Будет ли установка всей моей БД, чтобы
utf8mb4
вместоutf8
быть большое изменение производительности? Я действительно понимаю, чтоutf8mb4
больше и, следовательно, медленнее, поэтому я попытался использовать его только на рассматриваемых столбцах. - Есть ли способ для меня просто иметь ручку PHP
utf8
кодирование хорошо, даже еслиmysqli_charset
находится наutf8mb4
? - У вас есть идея?
У меня настоящая потеря на эту тему, и я честно не могу догадаться, какой вариант лучше. Googling на нем не помог слишком много, поскольку он только вернул ссылки, объясняющие различия в нем или о том, как конвертировать вашу базу данных в utf8mb4
, поэтому я очень хотел бы услышать мысли об этом одного из мудрых SO-коллег!
Столбцы в данном конкретном случае:
Мой ответ включая определение кодировки символов в 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
. там действительно был символ подчеркивания ...
Я прочитал ваш ответ по другому вопросу, и моя проблема связана с черными бриллиантами. Теперь я сделал почти все, что вы сказали, в первую очередь. Мои метатеги, заголовки php, почти каждая кодировка у меня установлена на 'UTF-8', точно так же, как написано здесь. Я получил кодировку на строку и получил 'UTF-8' для всех строк со специальными символами. ('ASCII' для неспециальных символьных строк). Единственное, о чем я могу думать сейчас, это то, что я ввожу данные непосредственно в базу данных из PHPMyadmin (через запрос, хотя). Может, так оно и есть? Я так потерялся прямо сейчас. – NoobishPro
Yeeeeeep, исправил его, ответив на другой пост, в конце. Довольно поздно, что на 'mysqli_set_charset()', я должен специально использовать 'utf8' или' utf8mb4', а не 'UTF-8'. Кроме того, я использовал имя PHPMyAdmin, которое, очевидно, было очень глупо. (Я получил подчеркнутое правописание оттуда!) Большое вам спасибо! Ты заслуживаешь пива, мой человек! – NoobishPro
Спасибо за похвалу. Я потратил годы, отдавая свой совет на этот вопрос, ответ на который я ответил. Вы говорите, что у меня есть орфографическая ошибка в этом Q & A (или этом)? Если это так, я должен это исправить. –