Say PHP отправляет некоторый текст MySQL для хранения, что-то вроде
INSERT INTO `some_table` ("foo") VALUES
('The quick brown fox jumps over the lazy dog');
Основная цель этого запроса, очевидно, сказать MySQL для хранения строки Быстрая коричневая лиса прыгает через ленивую собаку в базу данных.
Если PHP настроен на использование UTF-8, это означает, что когда он преобразует человеческие читаемые символы в двоичные - для передачи его в MySQL - он преобразует символы, используя систему кодирования UTF-8.
MySQL может считывать символы, закодированные в UTF-8, и поэтому у него нет проблем с пониманием того, что цифровая кодированная последовательность должна означать T
и h
и e
и т. Д. - в человекообразных символах.
Если MySQL настроен для хранения данных в таблице some_table
, используя latin1, когда он получает строку, то будет конвертировать символы из их кодировок UTF-8 в латинские эквиваленты до сохранения данных на жесткий диск.
В этом случае нет проблем - поскольку символы английского алфавита могут быть представлены как UTF-8, так и Latin1.
Однако возникают проблемы, если строка, отправленная PHP, содержит символы, которые могут быть представлены только UTF-8, а не Latin1, например. умная цитата “
. Когда MySQL пытается преобразовать смарт-цитату “
в цифровую форму, она не сможет - потому что Latin1 буквально не имеет цифрового кодирования, определенного для представления “
.
Я не уверен, какой точный процесс управления ошибками MySQL, когда он сталкивается с этой ситуацией, и является ли ситуация восстановимой, но в целом конечный результат заключается в том, что базовая кодировка будет повреждена и непригодна для использования.
Поскольку эта проблема возникает только для тех символов, которые не могут быть представлены двумя системами, и если 99% всех ваших сообщений связаны с английскими символами, вы можете не заметить проблему довольно долгое время, и даже тогда это будет только случайный характер, но попытка восстановить, когда вы заметите, проблемы могут быть разочаровывающими.
Так много. Самые первые иностранные языки. Если интересно, прочитайте это http://htmlpurifier.org/docs/enduser-utf8.html#whyutf8 – devpro