shandai ТС
Ветеран форума
Карма +452/-1
Offline
Пол:
Сообщений: 1334
город Хабаровск
Пешеход
|
|
« : 11 Ноября 2008, 12:22:42 » |
|
Есть: Apacheб, Mysql 5.0, W2003, PHP -все работает. Проблема в следующем, все данные в базу вносились на русском языке через ВЕБ, при выводе order by fam сортировка происходит но кривая, буква Д перед Ш и т.д. Почитал кучу форумов, пробовал много не помогает. 1. Менял кодировку my.inf на все что можно, соотвтественно добавлял уже с новой кодировкой в базу из Web результат 0, все как криво выводилось так и выводиться., если добавлять из коммандной строки то запись в коммандной строке будет по русски, все остальные добавленные из веб формы на албанском, а в ВЕБ форме при помсмотре все что добавленно из коммандной с троки на албанском. 2. Что делать, что бы сортировка выводилась грамотно.
|
|
|
Записан
|
Пешеход /Был: ЗАЗ-Lanos 1.6L 109 л.с. / Был: Иж 2126 гранат 2003г, УМПО, кастрюля, КПП ОМСК, стартер от ГАЗ 53, БК-21, звуковой сигнал от ГАЗ 3110, карб (солекс) ДААЗ-21073, свечи всегда "Чемпион", NGK-плохие, укороченная ручка КПП, БСЗ, подогрев заднего стекла и правого седенья, чехлы, тонировка задка, сцепа и диск totti, выжимной Coram, резина cordiant на штамповке РР от волги (все равно не помогает), перемычка АКБ-Стартер (тоже не помогла).
|
|
|
OVA
Moдератор
Карма +1551/-118
Offline
Пол:
Сообщений: 14739
Тула + д. Ревякино
Нормозавр 21261-070 (был). Нынче Фабула.
Тула + д. Ревякино ИЖ 21261-030
|
|
« Ответ #1 : 11 Ноября 2008, 12:58:43 » |
|
Обычно есть кодовая страница базы и есть кодовая страница клиента. Первая определяется при разработке базы, вторая задается при соединении клиента с сервером в параметрах подключения. У тебя явное несоответствие одного другому. Еще кодовая страница столбца может быть задана и порядок сортировки (collate order) данных этого столбца. Однако, этими мерами ты уже введенные "криво" данные в базе не исправишь. Но навести порядок при добавлении новых сможешь.
|
|
« Последнее редактирование: 11 Ноября 2008, 13:02:43 от OVA »
|
Записан
|
P.S. Василий. Еще один из беглых ижевчан. --- (ОКПП, ГБО, ЭСП), поборол электричество, "бустера" дворников нет
|
|
|
SergeiSS
Гость
|
|
« Ответ #2 : 11 Ноября 2008, 13:12:02 » |
|
Я когда в начале года начал заниматься ПХП (по работе надо было), то сначала набил много шишек с MySQL, а потом по совету Парамедика выбрал PostgreSQL. С тех пор у меня "почему-то" нет проблем ни с кодировками, ни с чем-то другим... Просто использую БД и всё. И до сих пор не жалею, особенно когда читаю (постоянно) про проблемы с MySQL. Это не реклама была А вообще, стандартный вопрос в такой ситуации "Покажи код, которым к базе коннектишься". Второй возможный ответ "Зайди на специализированный форум", т.е. больше спецов. Например, http://www.phpforum.ru/. Однако, этими мерами ты уже введенные "криво" данные в базе не исправишь. Но навести порядок при добавлении новых сможешь.
Есть в ПХП какие-то функции перекодировки, но я ими не пользовался (не было необходимости). Я думаю, что с их помощью можно будет порядок навести и в старых данных. Но голову поломать придется с тем, как это сделать.
|
|
« Последнее редактирование: 11 Ноября 2008, 13:13:57 от SergeiSS »
|
Записан
|
|
|
|
glory
Гость
|
|
« Ответ #3 : 11 Ноября 2008, 14:06:12 » |
|
Вероятнее всего несоответствие charset-а таблицы/столбца, charset-у реально загруженных данных. Коллашен обычно указывать смысла нет (разве что только для некоторых специфических видов задач) и мускул сам подпирает подходящий для выбранного charset. Поправить данные в базе возможно, но несколько геморно: выяснить в каком реальном наборе символов записаны данные в таблицу, mysqldump в файл, поправить дамп, чтобы кодировка данных совпадала с кодировкой указанной для таблиц, возможно придется воспользоваться каким-либо конвертором кодировок для трансляции данных, перезалить. В дальнейшем, во избежание проблем, из PHP кода надо выполнять директиву-запрос "SET NAMES <charset> ..." отражающую в каком наборе символов подаются данные со стороны клиента. Этот <charset> обязан коррелировать со значением атрибута тега <META http-equiv="Content-Type" content="text/html; charset=xxxxx" />, в противном случае возможно, что со страницы данные пойдут в, например, UTF, а в базу зальются как win1251.
PS: и долой перекодирующий апач, раньше он Russian Apache назывался, для интерактивных приложений он плохо подходит, поскольку хрен поймешь в каком же наборе символов PHP скрипту данные подаются.
|
|
« Последнее редактирование: 11 Ноября 2008, 14:11:29 от glory »
|
Записан
|
|
|
|
OVA
Moдератор
Карма +1551/-118
Offline
Пол:
Сообщений: 14739
Тула + д. Ревякино
Нормозавр 21261-070 (был). Нынче Фабула.
Тула + д. Ревякино ИЖ 21261-030
|
|
« Ответ #4 : 11 Ноября 2008, 14:06:21 » |
|
Вот именно это я и имел в виду, что "автоматически" навести порядок не выйдет. Данные записаны УЖЕ в разных кодировках, и отделять зерна от плевел будет ой как непросто. А каким движком баз данных пользоваться-это вопрос постановки задачи. Выбран "мускул"- право личное каждого. Не забывать только что для коммерческого использования он платный! Преимущества серверов SQL друг перед другом-это ж айтишный ВАЗ-УЗАМ
|
|
|
Записан
|
P.S. Василий. Еще один из беглых ижевчан. --- (ОКПП, ГБО, ЭСП), поборол электричество, "бустера" дворников нет
|
|
|
shandai ТС
Ветеран форума
Карма +452/-1
Offline
Пол:
Сообщений: 1334
город Хабаровск
Пешеход
|
|
« Ответ #5 : 11 Ноября 2008, 14:42:10 » |
|
Вот собственно код ****************************************************** <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> $db = new mysqli ('localhost','','','satit'); if (mysqli_connect_errno()) {echo 'Nevozmogno podkluchitsa k baze'; exit;} echo 'Список всех инженеров...</br>'; /////////////////////////////////////////////////////////////////////////////// $query = "select * from ING order by fam"; $result = $db->query($query); $num_results = $result->num_rows; echo 'В базе '.$num_results.' инженеров </br>'; for ($i=0; $i <$num_results; $i++) { $row = $result->fetch_row(); echo $row; } ******************************************************************************** Соответсвенно в этой же кодировке и добавляю в базу. Кодировку в my.ini менял, на такую же данные все перезаписывал. Без результата. 1. Либо они вносятся в совершенно другой кодировке (как это зачечь я я так и не понял) 2. На php там во сновном про линукс, и все от туда я попробовал, и уловил следующую мысль: что мускул не правильно сартирует, потому как сортирует относительно своей логики и указанного типа данных например w1251. 3. Я в my.ini меняю кодировку на нужную, данные получаю в ВЕб нормальные и перезаписываю их, но они потом все равно не сортируются.
|
|
|
Записан
|
Пешеход /Был: ЗАЗ-Lanos 1.6L 109 л.с. / Был: Иж 2126 гранат 2003г, УМПО, кастрюля, КПП ОМСК, стартер от ГАЗ 53, БК-21, звуковой сигнал от ГАЗ 3110, карб (солекс) ДААЗ-21073, свечи всегда "Чемпион", NGK-плохие, укороченная ручка КПП, БСЗ, подогрев заднего стекла и правого седенья, чехлы, тонировка задка, сцепа и диск totti, выжимной Coram, резина cordiant на штамповке РР от волги (все равно не помогает), перемычка АКБ-Стартер (тоже не помогла).
|
|
|
Elrie
Живёт здесь
Карма +444/-0
Offline
Пол:
Сообщений: 591
Воронеж
Opel Astra H 1.8, белый
Воронеж Opel Astra H 1.8
|
|
« Ответ #6 : 11 Ноября 2008, 14:45:21 » |
|
PS: и долой перекодирующий апач, раньше он Russian Apache назывался, для интерактивных приложений он плохо подходит, поскольку хрен поймешь в каком же наборе символов PHP скрипту данные подаются.
А вот это автор темы все же проверил? Ибо очень важный совет, иначе постоянные проблемы будут с кодировками.
|
|
|
Записан
|
верно служил прежде ИЖ-2126-020 / 2003 г / дипломат
|
|
|
shandai ТС
Ветеран форума
Карма +452/-1
Offline
Пол:
Сообщений: 1334
город Хабаровск
Пешеход
|
|
« Ответ #7 : 11 Ноября 2008, 15:13:42 » |
|
А вот это автор темы все же проверил? Ибо очень важный совет, иначе постоянные проблемы будут с кодировками.
По идее у меня не должен быть перекодирующий апач, а как это проверить? Да и это не причем. Так как данные вносятся в какой кодировке не понятно, но суть что они в этой кодировке но сортируются.
|
|
|
Записан
|
Пешеход /Был: ЗАЗ-Lanos 1.6L 109 л.с. / Был: Иж 2126 гранат 2003г, УМПО, кастрюля, КПП ОМСК, стартер от ГАЗ 53, БК-21, звуковой сигнал от ГАЗ 3110, карб (солекс) ДААЗ-21073, свечи всегда "Чемпион", NGK-плохие, укороченная ручка КПП, БСЗ, подогрев заднего стекла и правого седенья, чехлы, тонировка задка, сцепа и диск totti, выжимной Coram, резина cordiant на штамповке РР от волги (все равно не помогает), перемычка АКБ-Стартер (тоже не помогла).
|
|
|
glory
Гость
|
|
« Ответ #8 : 11 Ноября 2008, 15:25:53 » |
|
PHP-ой будут сортироваться, средствами сервера базы данных - нет, из-за несоответсвия фактической кодировки данных установленному для таблицы order collation. 3. Я в my.ini меняю кодировку на нужную, данные получаю в ВЕб нормальные и перезаписываю их, но они потом все равно не сортируются. не поможет ибо таблицы "чинить" надо А в коде, данные скорее всего передаются в win1251, т.к. явно указан чарсет страницы, но поскольку явно SET NAMES не указано, то вся ботва, а именно character_set_client и character_set_connection, наследуется от настроек сервера и совсем не факт, что первый будет тоже win1251 Добавь в код выполнение запроса show variables like 'char%' и посмотри на результат - будет видно с какими параметрами установлено текущее подключение к базе.
|
|
« Последнее редактирование: 11 Ноября 2008, 15:33:01 от glory »
|
Записан
|
|
|
|
SergeiSS
Гость
|
|
« Ответ #9 : 11 Ноября 2008, 16:16:11 » |
|
Я тут посмотрел хэлп - есть целая группа функций для работы с кодировками строк. Начинаются функции с букв "mb_......", вместо многоточия - имя функции. Одна из них mb_convert_encoding — Convert character encoding
Описание string mb_convert_encoding ( string $str, string $to_encoding [, mixed $from_encoding] )
Converts the character encoding of string str to to_encoding from optionally from_encoding.
Вроде как, с помощью этих функций можно будет перекодировать содержимое БД, которое уже было неправильно закодировано. Т.е. просто выгрузить данные, перекодировать и проапдейтить.
|
|
|
Записан
|
|
|
|
|