Действительно ли мне нужно переключаться с VARCHAR на VARBINARY для UTF-8 в Mysql и PHP?
-
06-07-2019 - |
Вопрос
Действительно ли мне нужно переключаться с VARCHAR на VARBINARY и TEXT на BLOB для UTF-8 в Mysql и PHP?Или я могу придерживаться полей CHAR / TEXT в MySQL?
Решение
Может быть.Как джейсон как указывалось, и я не заметил, MySQL UTF-8 отображает только базовую многоязычную плоскость.Однако в руководстве указано, что "Их [utf8 и ucs2] достаточно почти для всех символов на основных языках", так что, вероятно, это безопасно, но вы можете захотеть проверить, что находится в базовой многоязычной плоскости, просто чтобы быть уверенным.
Оригинальный Ответ
Пока ваша база данных использует UTF-8, вы должны иметь возможность использовать VARCHAR и TEXT.(В качестве дополнительного примечания, Руководство пользователя MySQL рекомендует использовать VARCHAR вместо CHAR с UTF-8 для экономии места.Поскольку это так, использование VARCHAR и TEXT должно быть безопасным.)
Другие советы
Не обязательно. Поддержка MySQL UTF-8 ограничена только 3-байтовым UTF8, который включает в себя все вплоть до базовой многоязычной плоскости а>. Только если вам нужны символы в диапазоне 4 байта, вам нужно использовать хранилище BLOB; это редко, но не совсем редко. Посмотрите статью в Википедии, чтобы узнать, что вам будет не хватать, и решите, есть ли что-то, что должно быть.
Вот хорошая ссылка о работе с UTF-8 в PHP. MySQL очень хорошо работает с UTF-8, если вы правильно настроили параметры сортировки. С другой стороны, у PHP много проблем.
Конечно, безопасно использовать VARCHAR для хранения текста UTF-8, и для этого не требуется VARBINARY.
VARCHAR - это «CHARACTER WITH VARIABLE LENGTH», который безошибочно адаптируется к количеству байтов, необходимому для хранения символов в соответствии с выбранным CHARCODE.
Существует также причина, по которой поддержка MySQL UTF-8 ограничена только 3 байтами. Вам нужно будет погрузиться в соответствующие документы UTF-8, в которых рассказывается о процедуре кодирования UTF-8, чтобы понять, почему это правильно.
И последнее, но не менее важное: если вы не уверены в UTF-8, вы всегда можете подписаться на UTF-16. Тем не менее, вы все равно будете использовать VARCHAR, поскольку он все равно будет безошибочно адаптироваться к правильной длине байта.