mysql — Обработка смешанных utf8 и utf8mb4 MYSQLI & amp; Переполнение стека

Только сейчас я столкнулся с проблемой, с которой случайно не сталкивался раньше:

Чтобы поддержать смайлики в определенных колонках, я решил установить mysqli_set_charset() в utf8_mb4 и несколько столбцов в моей базе данных.

Теперь я столкнулся с проблемой PHP на самом деле не правильно обрабатывать символы с акцентом, поступающие из нормального utf8 закодированные поля.

Теперь я застрял с перепутавшим utf8 а также utf8mb4 Результаты. Так как моя обработка данных не очень сильна (раньше работала с фреймворками, которые обрабатывали все это для меня), я совершенно не знаю, как мне лучше всего решить эту проблему.

Я думал о следующих вариантах:

1) установить всю мою базу данных на utf8mb4 сопоставление вместо utf8 с несколькими исключениями.

2) использовать mysqli_set_charset() чтобы изменить его, и просто убедитесь, что запросы, получающие указанные данные отделены

Теперь ни одна из них не кажется мне отличной идеей, но я не могу придумать лучшего решения.

Итак, есть оставшиеся вопросы:

  • Будет ли установка всей моей базы данных в utf8mb4 вместо utf8 будет большое изменение производительности? Я понимаю, что utf8mb4 больше и, следовательно, медленнее, поэтому я попытался использовать его только для рассматриваемых столбцов.
  • Есть ли способ для меня просто иметь ручку PHP 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, там действительно было подчеркивание …

0

Решение

Пишется utf8mb4 (без подчеркивания).

Увидеть Проблема с UTF8 символов; то, что я вижу, не то, что я храню .
В частности, прочитайте «Обзор того, что вы должны делать» в ответе.

Вам не нужно менять всю базу данных. Можно указывать utf8mb4 только для выбранных столбцов.

Вам нужно использовать utf8mb4 для связи, но вы указываете 'UTF-8', который является эквивалентом MySQL внешнего мира utf8mb4, MySQL, utf8 это подмножество utf8mb4, (Примечание: я точно использую дефисы и подчеркивания.)

utf8mb4 не больше и не медленнее для передачи символов, общих между utf8mb4 и подмножеством utf8. Эмодзи имеют 4 байта, поэтому они больше, чем большинство других символов, но вы застряли с ними на 4 байта; не парься

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]