![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Приветствую вас, коллеги.
В базе хранятся данные в кодировке utf-8. Когда я гляжу через EMS SQL Manager, вижу там такое знаете РљРѕСЃРјРѕСЃ справа. Через phpmyadmin вижу СилинÑкий ÐлекÑандр. Чарсет для таблицы прописан utf8. У меня есть девелоперский сервер, который дома, и продакшн, который хрен знает где, и доступ есть только к одной базе и фтп-каталогу, куда льётся сайт. Сайт тоже в utf-8, надо сказать. Так вот, на моём девелоперском сервере всё отдаётся как надо, то есть получается читаемая страничка. А вот с продакшна приходит, видимо, перекодированное, потому что выглядит примерно как ?????�???????????? ???�?�?????�??????. Обратите внимание: база одна и та же, она на продакшн-сервере лежит. Вот что даёт SHOW VARIABLES LIKE '%character_set%':
Вопрос: как это происходит и как с этим бороться? Это сообщение отредактировал(а) turing - 5.11.2009, 13:53 |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
что значит "приходит"?
если зайти на продакшен, там отображается все нормально? Добавлено через 8 минут и 2 секунды на продакшене mysql_query("SET NAMES utf8"); сразу после коннекта |
|||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Приходит с продакшна — значит отображается на html-странице, сгенерированной тем php, который стоит на продакшне.
А что вы подразумеваете под «зайти на продакшн»? mysql_query("SET NAMES utf8"); сделал, теперь и с продакшна, и с локального приходит Безумные Ñтнографы (раньше с прода приходили вопросы, а с локального нормальные буквы). Мне бы очень хотелось понять, где загвоздка. Может, у меня база неправильно наполнена? Я импортировал CSV в кодировке utf-8. Да и хранится вроде в ней. |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
||||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Ну, вот DDL:
Вроде чарсет указан… |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 1 Всего: 16 |
Если после SET NAMES utf8 у вас строки нормально не отображаются, значит, не в utf8 записаны они
|
|||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Я импортировал CSV в кодировке UTF-8. Сейчас экспортирую, получаю нормальную CSV в той же кодировке, всё читаемо.
Как же в базе может быть не UTF? Это сообщение отредактировал(а) turing - 6.11.2009, 17:32 |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Легко. База же не знает, что CSV в кодировке UTF-8
|
|||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Вот не могу понять. В базу импортирую в UTF8. Из базы экспортирую в UTF8. При этом в базе что? Разве не UTF8?
И самое непонятное: почему на одном сервере данные выглядят нормально, а на другом — нет. |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Зависит от настроек по умолчанию.
Если не указывать специально. Это сообщение отредактировал(а) Ипатьев - 6.11.2009, 20:55 |
|||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Вопрос так и не решён. Напомню суть проблемы.
Есть два web-сервера с php. Есть сервер mysql. В БД mysql хранятся строки в кодировке utf8. Collation таблиц и полей указан utf8. Когда я делаю запрос на выборку через php-скрипт на первом сервере, а потом вывожу выбранные данные в браузер, то вижу нормальный русский текст. Когда я делаю запрос на выборку через php-скрипт на втором сервере, а потом вывожу выбранные данные в браузер, то вижу знаки вопроса вместо русских букв. Причём этих знаков в двое больше, чем должно быть букв. Латинские буквы, цифры и знаки препинания отображаются нормально. SET NAMES никакого эффекта не имеет. Подскажите, где копать? |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
set names надо делать не только перед выборкой, но и перед вставкой. раз у тебя и проблемы при выводе, то делаю заявление провидца: при импорте из CSV данных в кодирове utf-8 "set names utf8" вызван не был. из-за чего сервер по причине конфигурации "character_set_client latin1" воспринял твои УТФ8-ные данные как latin1. и перекодировал. кроем кодировки клиент/соединения, которое можно изменить при помощи выполнения запроса "set names", есть ещё и указание кодирвки, с которой браузер отображает страницу. вот у тебя есть фраза
то не указано, в какой кодировке у тебя происходит отображение в браузере. Отправляешь ли ты заголовок Content-Type c указанием кодировки, или задаешь кодировку значением тега <meta http-equiv="content-type" не знает никто, кроме тебя. в принципе, можешь и дальше партизанить, только учти, что у тебя есть: кодировка данных, кодировка хранения(то, что можно определить для базы, таблицы и поля в отдельности), кодировка подключения и кодировка результата запроса(их перечисляю вместе, потому как set names устанавливает и то, и то) и кодировка отображение браузером. если на каком-то этапе(запись в БД, чтение из БД и вывод) происходит рассогласование кодировки в настройках и кодировки данных, то получаются вот такие вот неприятные вещи. |
|||
|
||||
| turing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Прописал SET NAMES, теперь он выполняется при каждом коннекте к базе. Вручную через веб-интерфейс перебил все текстовые поля (их пока немного). Картина несколько изменилась. Теперь при обращении к «кривому» серверу вместо русских букв в браузере символы <?> (знак вопроса в чёрном квадрате). С «нормального» сервера опять получаю нормальные буквы.
Насчёт Content-type. У меня кодировка задаётся в meta-тэге. «Кривой» сервер отдаёт заголовок Content-Type: text/html; charset=utf-8, «нормальный» отдаёт заголовок Content-Type: text/html. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
||||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |