Странная проблема кодирования - PullRequest
0 голосов
/ 16 января 2009

У меня есть таблица данных, закодированная в кодировке latin5, и все столбцы в таблице также являются latin5. С консоли mysql, когда я ввожу "SET NAMES 'latin5'" и запрашиваю результаты таблицы в порядке. Когда я пытаюсь удалить или вставить / обновить все кодировки новых данных идеально. Но когда я пытаюсь вставить данные Iso-8859 (также проверьте это с помощью mb_detect_encoding) в базу данных, и я пытаюсь вставить данные без «SET NAMES», они не вставляются / не обновляются / не выбираются в надлежащих кодировках или когда я использовал «SET» Имена 'latin5' 'не вставляются / не обновляются надлежащим образом, но выбираются в порядке. Latin5 данные поступают в правильных кодировках только с заданными именами' latin5 '. Когда я использую набор имен 'utf8', запросы на выборку плохо закодированы, но вставка / обновление в порядке.

Причина, по которой я спросил, что мы пойдем на производство. И это заставляет меня задуматься о возможных будущих проблемах.

1 Ответ

2 голосов
/ 16 января 2009

mb_detect_encoding не знает, какова кодировка вашей строки. Это делает квалифицированное предположение, но нет никаких гарантий, что оно будет угадано правильно. Особенно, если все кандидаты являются однобайтовыми кодировками, как в случае с latin1 и latin5.

На самом деле ничто не заменит знание того, что вы делаете, если вы хотите получить правильные кодировки. Я предлагаю вам прочитать эти страницы хотя бы пару раз:

В частности, обратите внимание, что веб-страница обслуживается заголовком http, который указывает кодировку, с которой кодируется страница. Если вы явно не установите это из своего php-скрипта, вы будете использовать настройки веб-серверов по умолчанию, которые могут различаться в зависимости от сервера.

Кроме того, будьте осторожны, чтобы на самом деле понять, что происходит, а не делать проб и ошибок. Последний может легко получить что-то, что работает в каком-то контексте, но не в каждом контексте.

И наконец. Если у вас есть какой-либо выбор, я серьезно советую вам использовать utf-8 для всего. latin5 принесет вам много горя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...