Привет Я сохраняю в основном английский и немецкий символы в базу данных mysql, которая в настоящее время настроена на кодировку utf-8.
Я предполагаю, что я должен использовать latin1 charset для этого типа данных, это правильно?
Если да, то как я могу изменить кодировку, чтобы исправить немецкие символы, которые теперь сохранены в utf-8?
ОБНОВИТЬ
Может быть, это проблема с возвратом … Когда я экспортирую данные из db через php, конечно, я получаю utf-8 обратно, могу ли я сделать восстановление, чтобы дать мне latin1?
ОБНОВЛЕНИЕ 1
Хорошо, я создаю сайт, html-кодирование – это uft-8, db – uft-8, и теперь я хочу запустить некоторый экспорт и извлечь данные, которые должны быть возвращены на листе excel, а данные – utf-8, но здесь мне нужны символы latin1 … или кодирование листа excel, извлеченного из db, должно быть таким, чтобы Töst покажет Täst. Прямо сейчас я получаю такие данные -> Töst
ОБНОВЛЕНИЕ 2
Я использую следующий сценарий php для создания дампа:
http://www.fundisom.com/phparadise/php/databases/mySQL_to_excel
on line 48 Я изменил код на
header("Content-Type: application/$file_type; charset=utf-8");
никаких изменений в поведении.
Как я могу решить проблему?
Почти решение
<?php $text = "ö is a valid UTF-8 character"; echo 'Original : ', $text, PHP_EOL; echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; ?>
это то, что мне нужно, я думаю … но мне нужно проверить его в контексте php-скрипта … завтра 🙂
Я согласен с предыдущими ответами, что UTF-8 является хорошим выбором для большинства приложений.
Остерегайтесь ловушек, которые могут вас ждать! Вы хотите быть осторожным, чтобы использовать постоянную кодировку символов во всей системе (формы ввода, выходные веб-страницы, другие интерфейсы, которые могут получить доступ или изменить данные).
Я провел несколько неприятных часов, пытаясь понять, почему на моей веб-странице исказилось простое β или é, только чтобы найти что-то где-то сработало кодирование. Я даже видел случаи, когда текст запускается через несколько кодеров – один раз превращая одиночный кавычек в восемь байтов.
Итог, не предполагайте, что правильный перевод будет выполнен; быть явным о кодировке символов во всем вашем проекте.
Изменить: я вижу, что в вашем обновлении вы уже начали открывать эту особую радость. 🙂
После использования двухбайтовых символов, таких как UTF-8, нет возврата …
Чем ближе вы можете использовать iconv
как это
<?php $text = "ü is still a valid ISO-8859-1"; echo 'Original : ', $text, PHP_EOL; echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; ?>
подробности: http://php.net/manual/en/function.iconv.php
С UTF-8 вы можете хранить любой символ, поддерживаемый Unicode. С UTF-8 вы можете хранить любой символ, поддерживаемый Unicode, поэтому у вас не должно возникнуть проблемы с его использованием для хранения только латинских символов (которые являются просто небольшим подмножеством что поддерживает Unicode).
Итак, для хранения информации вы в порядке; если вам нужно делать какие-либо преобразования при извлечении данных, это зависит от соединителя, который вы используете для получения данных из БД, и от того, как ваш язык программирования обрабатывает строку.
Для обновления: если вы используете PHP для создания веб-страниц, не можете ли вы просто отправить правильный HTTP-заголовок, указав, что ваша страница закодирована в UTF8?
UTF-8 – лучший выбор для всех целей и задач. Если у вас нет действительно насущной причины пойти на latin1 (например, совместимость с другими приложениями), пойдите для этого.
Существует несколько совпадений UTF-8, которые обрабатывают умлауты и порядок сортировки по-разному (см. Здесь список). Возможно, вам придется выбирать один за другим в зависимости от ваших требований. Тем не менее, все они могут хранить умлаутов.