|
|
|
| Спасибо http://www.softtime.ru, что Вы есть.
Пришлось столкнуться с проблемой кодировки кирилицы.
Увидел, что люди тоже сталкиваются с вопросиками вместо русских букв.
Кодировку побороть получается, а вот с сортировкой пока проблемы. Помогите кто может.
Вот вся история:
Как пишет уважаемый cheops http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=8208
Это связано с тем, что у вас MySQL версии выше 4.1.0 - начиная с этой версии изменилась система кодировок
Вот, к примеру, NikVA писал
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=9884&page=2
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=9609&page=1,
что получилось избавиться от вопросиков только перейдя на кодировку 'koi8r'. Но там неправильно указавна кодировка 'cpl1251' !!! Надо писать 'cp1251' .
И тоже может получиться.
Просто устанавливаемая кодировка при подключении должна соответствовать кодировке полей в базе. Если получилось с 'koi8r', значит в базе такая кодировка на полях.
Есть ещё одно средство. На одном из хостов мне помогла всего-лишь одна строчка после соединения с базой mysql_connect:
mysql_query("SET NAMES cp1251");
|
И ещё одно. Убрать вопросики - это пол дела. На рабочем хосте, буквально недели две назад, хостеры перенесли всё на другой сервер, ну и естественно с более новыми программами с utf-8. Как результат в их phpadmin вместо русских букв появились иероглифы. Работать с phpmyadmin стало невозможно - сохранялись вопросики. При этом мой скрипт продолжал корректно работать с русским шрифтом в базе и на запись и на чтение.
А вот сортировка стала не правильной:
Васильев, Головко, Боднар, Высоцкая, Руденко, Ковтун, ...
ну явно не по-русски. Это естественно заметили также и наши заказчики ... Но у нас-то раньше скрипт работал правильно. Как быть?
Так вот. Кодировка базы и всех текстовых полей в таблицах стала Latin1_swedish_ci
(изначально я создавал базу и все текстовые поля с кодировкой cp1251_general_ci, а всё изменилось уже на рабочем сайте ~ 30000 наработанных записей в базе, после того как хостеры перенесли все сайты на другой сервер)
... Неделю мы общались с хостерами. Спустя неделю они установили у себя phpMyAdmin 2.6.4-pl2
MySQL 4.0.25-standard - остался как и был
- иероглифы в phpmyadmin исчезли - т.к. в пункте Language в phpmyadmin появился пункт 'Russian (ru-win1251)' - работает корректно только на нём.
Но сортировка так и осталась неверной.
В phpMyAdmin 2.6.4-pl2 исчезли поля с кодировками для базы и полей таблиц - узнать какая сейчас там кодировка - не знаю как :(((
локально в Денвере срабатывает нормально, а на проблемном хосте выдаёт ошибку:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET' at line 1
|
команды:
mysql_query("SET NAMES cp1251");
mysql_query("set character_set_client='cp1251'");
mysql_query("set character_set_connection='cp1251'");
mysql_query("set character_set_database='cp1251'");
mysql_query("set character_set_results='cp1251'");
mysql_query("set character_set_server='cp1251'");
mysql_query("set collation_connection='cp1251_general_ci'");
|
не помогают. Замена на 'koi8r' - тоже - вопросиков-то уже нет. Всё работает даже без этих строк. Нет только правильной сортировки.
сторонний скрипт http://zapimir.net/skdumper/
(реально стоит того, что о нём говорят на http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5257&page=2 для архивирования и восстановления больших баз - спасибо за ссылку и спасибо автору)
считывал базу всегда корректно с русскими буквами. Но кодировку при загрузке на локальную базу всегда ставил ту, что была в базе на хосте. Сначала он делал cp1251_general_ci, после вмешательств хостеров Latin1_swedish_ci.
Сейчес, когда хостеры были удалили базу и воссоздали её заново, а также сделали русские буквы в phpMyAdmin - при переносе базы с хоста в локаль скрипт создаёт базу и текстовые поля в utf8_general_ci.
Локально пользуюсь phpMyAdmin 2.6.1 - в нём доступны все необходимые кодировки.
Теперь я ни как не могу сделать сортировку на хосте правильной. Локально всё нормально.
Также не знаю как ещё можно узнать действительную кодировку полей в базе - phpMyAdmin 2.6.1 как-то же это показывал кодировки на полях. Кстати закачал его на хост, а там и у него эти поля исчезли.
Конечно будем ещё с хостерами разговаривать, но всё таки, чтоб меньше от них зависеть -
если кто знает какие-то команды, что влияют на сортировку - подскажите пожалуйста.
Заранее признателен.
Help, please. | |
|
|
|
|
|
|
|
для: slamor
(04.12.2005 в 18:14)
| | Т.е. сейчас у хостера стоит MySQL 4.0.25 и она не правильно сортирует русский текст? Я правильно понял? При этом при загрузки с этого хоста - текст в нём в кодировке cp1251?
PS Какой пост классный будем теперь на него ссылаться :))) | |
|
|
|
|
|
|
|
для: cheops
(05.12.2005 в 02:42)
| | Да правильно - на хосте cPanel показывает:
Версия MySQL 4.0.25-standard-log
Версия PHP 4.3.11
phpMyAdmin 2.6.4-pl2
И проблема - не правильно сортируется русский текст.
только вот текст в кодировке cp1251 в базе был изначально, когда я там базу создавал.
т.е. с 01.10.2005 сайт работал и сортировка работала отлично и сайт уже сдали заказчикам.
А после того как неделю назад хостеры удалили, а потом создали новую базу, восстановили данные и поставили phpMyAdmin 2.6.4-pl2 я уже не знаю какая там кодировка. Судя по тому, что сортировка не верная - точно уже не cp1251, т.к. с ней работало нормально.
Вот и прошу помощи - кто знает как узнать реальную кодировку текстовых полей в таблице?
Раньше-то я в phpMyAdmin смотрел - он при открытии структуры таблицы напротив каждого поля столбец "Сравнение" писал. Именно это значение непосредственно в поле на сортировку влияет. А теперь у хостеров нет такого столбца в phpMyAdmin. Более того, как я уже говорил выше, в закачаном на хост phpMyAdmin 2.6.1 он тоже исчезает.
Кстати cheops. Спасибо за ссылку http://drupal.kiev1.org/node/15
Сегодня (а вернее вчера) искал - не мог найти.
Именно там я когда-то команду mysql_query("SET NAMES cp1251"); нашёл.
Она отлично от вопросиков избавляет в новых phpMyAdmin, где есть только utf-8.
Там и про сортировку пишут - попробую завтра с
SELECT CONVERT(CONVERT(поле USING binary) USING кодировка) FROM таблица
на хосте поиграться. Может чего выясню.
Вот например хорошее отличие новых версий. Комманда:
SHOW FULL COLUMNS FROM vote_users
лосально выдаёт столбцы:
Field Type Collation Null Key Default Extra Privileges Comment
на хосте нет столбца Collation:
Field Type Null Key Default Extra Privileges
И как с этим бороться?
Кто чего знает про сортировку? Пожалуйста пишите - очень нужна помощь. | |
|
|
|
|
|
|
|
для: slamor
(05.12.2005 в 04:19)
| | Вы когда в phpMyAdmin заходите там на первой странице какая кодировка выбрана? В выпадающем списке Language - если cp1251 и при этом русский текст отображается нормально без кракозябликов - значит и в базе данных cp1251 - следует пинать хостеров, чтобы они в конфигурационном файле прописали что-то вроде
#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/mysql/"
#Path to the database root
datadir="C:/mysql/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=cp1251
|
Начиная с 4.0.25 там всё нормально должно быть... | |
|
|
|
|
|
|
|
для: cheops
(05.12.2005 в 12:04)
| | Да всё так на первой странице в пункте Language в phpmyadmin выбран пункт 'Russian (ru-win1251)' и только на нём phpmyadmin отображает корректно кирилицу - нет только сортировки. Спасибо будем уже более предметно с хостерами общаться. :))) | |
|
|
|
|
|
|
|
для: cheops
(05.12.2005 в 12:04)
| | Всё спасибо - пожар стих. Сортировка на сайте заработала нормально. Жаль правда не удалось добиться логического завершения - хостеры не устанавливали у себя:
default-character-set=cp1251
и в скрипте осталось не ясно как узнать действующую кодировку и сортировку.
В общем, не удивляйтесь, но у хостеров почему-то так ничего и не получилось и они вернули всё на старый сервер. Вот такие пироги.
Правда перед заказчиками подставляют нас: чего-то делают там - то вопросики появятся, то исчезнут, то пол вечера вообще домен отсутствует в инете. А у заказчиков-то сейчас самый пик пошёл - конкурс с голосованием в реальном времени организовали, две страны задействовали, а тут хостеры понимаешь, проблему устраняют. Слов не хватает.
Теперь там:
MySQL 4.0.25-standard-log
phpMyAdmin 2.6.3-pl1
PHP 4.3.11
Language в phpmyadmin выбран 'Russian (ru-win1251)' и только на нём phpmyadmin отображает корректно кирилицу. сортировка работает нормально.
наверно и правда в базе сейчас cp1251.
(только есть же cp1251_general_ci, cp1251_bulgarian_ci и др. - как теперь узнавать какая именно, а ведь тут и зарыта неверная сортировка и сравнения )
просто не нравится мне когда остаются не доконца осознанные вещи :)
SHOW FULL COLUMNS FROM table_name там также отсутствует столбец Collation
Field Type Null Key Default Extra Privileges
SHOW CHARACTER SET выдаёт ошибку - выше по тексту приведена.
В общем как в новых я даже не знаю чего: MySQL или phpMyAdmin - (у меня локально MySQL 4.1.8-max из поставки Денвера и есть столбец Collation) неизвесно как выяснить текущую и установить свою кодировку.
Раньше чего бы хостер не установил в настойках - всегда можно было выкрутиться:
создал базу. При ненастроеном MySql - Collation в latin1_swedish_ci будет установлено - ну и, что. Установил значение Collation например в cp1251_general_ci и нет проблем.
В крайнем случае mysql_query("SET NAMES cp1251"); написал, если в phpMyAdmin нет
ru-win1251, а только ru-utf-8 можа выбрать. И всё нормально.
Сейчас же выходит, что есть зависимости от хостера, а это значит, что данная история может повторяться и у других (надеюсь с более расторопными хостерами).
Если бы удалось узнать почему и когда пропадает Collation и какой тогда новый подход предлагается для сортировки (да. надо читать матчасть по нововведениям). Тогда можно было бы сделать заключение например, что если кирилица отображается верно, а сортировка нет, то это только в конфигурационном файле MySQL, а значит только у хостера.
Вот и вся история. cheops отдельное спасибо за помощь :))) | |
|
|
|
|
|
|
|
для: slamor
(06.12.2005 в 00:01)
| | Сортировка (Collation) и кодировка (Charset) для таблиц и столбцов присутствует только в MySQL начиная с версии 4.1, в 4.0 они выставляются глобально. Зря хостеры их не ставят - это сейчас стандарт де-факт, львиная доля Web-разработчиков работают в Windows... а хостеры в первую очередь по моему мнению должны беспокоится об удобстве разработчиков (они им услуги предоставляют), а не о собственной безопасности и удобстве эксплуатации сервера. | |
|
|
|