Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Знаки вопросов вместо русского текста в MySQL
 
 автор: dim   (02.08.2006 в 16:01)   письмо автору
 
 

Почему-то при вводе в гостевую сообщения происходит следующее: если ввести на английском, то сообщение отображается корректно, но если же на русском, то О УЖАС! вместо каждого русского символа отображается символ вопроса

   
 
 автор: Loki   (02.08.2006 в 16:39)   письмо автору
 
   для: dim   (02.08.2006 в 16:01)
 

гостевая на БД?
если да, то mysql_query("SET NAMES 'cp1251'"); вам поможет

   
 
 автор: Vit-j   (02.08.2006 в 19:21)   письмо автору
 
   для: dim   (02.08.2006 в 16:01)
 

Если в базе с кодировкой не поможет, или по другим каким либо причинам не получится, то можно поробовать urlencode(); И urldecode();

   
 
 автор: Loki   (02.08.2006 в 20:36)   письмо автору
 
   для: Vit-j   (02.08.2006 в 19:21)
 

Не... это немного из другой оперы.

   
 
 автор: dim   (11.08.2006 в 12:50)   письмо автору
 
   для: Loki   (02.08.2006 в 20:36)
 

Loki, не уточните кое-что?
скажем, у меня есть файл index.php, куда надо ввести, к примеру, только.. имя.
Передаем через форму post-ом переменную $name в файл proc.php, там же вносим в базу в таблицу Name, в поле nm переменную $name, полученную из index.php, ну а потом, если все прошло успешно, переходим в index.php, где и выводим необходимые сообщения (в зависимости от значения $action).
Так вот на каком этапе и где именно надо выполнить запрос mysql_query("SET NAMES 'cp1251'"); и, если можно, немного подробнее об написанном выражении

   
 
 автор: dim   (11.08.2006 в 14:56)   письмо автору
 
   для: Loki   (02.08.2006 в 20:36)
 

valenok, спасибо - все работает!! (модератор стер: "Сразу после подключения к бд..")
а не расскажите, почему так? что это выражение значит?

   
 
 автор: buka   (11.08.2006 в 16:36)   письмо автору
 
   для: dim   (11.08.2006 в 14:56)
 

Интересно что же стер модератор

   
 
 автор: dim   (12.08.2006 в 14:35)   письмо автору
 
   для: buka   (11.08.2006 в 16:36)
 

стер "Сразу после подключения к бд.." - так сделал и все заработало!!..(кириллица)
неплохо бы узнать значение этого выр-ия. Чувствую, что элементарно, но мне не встречалось..(

   
 
 автор: hawk   (12.08.2006 в 23:36)   письмо автору
 
   для: dim   (12.08.2006 в 14:35)
 

mysql_query("SET NAMES 'cp1251'");
"говорит" MySQL чтоб она поменяла кодировку 866 (DOS) на кодировку cp1251(Windows).

   
 
 автор: Киналь   (12.08.2006 в 23:51)   письмо автору
 
   для: hawk   (12.08.2006 в 23:36)
 

А зачем тогда нужно DEFAULT CHARSET? Или это кодировка, в которой данные храняться, а SET NAMES - в которой выводятся? Что-то как-то сложно...

   
 
 автор: cheops   (13.08.2006 в 01:00)   письмо автору
 
   для: Киналь   (12.08.2006 в 23:51)
 

DEFAULT CHARSET - говорит в какой кодировке данные будут храниться в таблице, а
SET NAMES - говорит в какой кодировке будет идти диалог клиента и сервера.
Т.е. если у вас DEFAULT CHARSET определено как cp1251, а SET NAMES в koi8-r, то добавление информации в кодировке koi8-r ни к каким конфликтам не приведёт - в таблицу данные лягут перекодированные в cp1251.

   
 
 автор: Киналь   (13.08.2006 в 20:40)   письмо автору
 
   для: cheops   (13.08.2006 в 01:00)
 

Так и думал=) Спасибо, буду знать!

   
 
 автор: vovik_sumy   (16.08.2006 в 15:14)   письмо автору
 
   для: Киналь   (13.08.2006 в 20:40)
 

В продолжение темы.. У меня в таблице есть поле film_title. Там как вы догадываетесь названия фильмов. Так вот когда я сортирую по этому полю(ORDER by film_title) Мне выдаёт совсем не по алфавиту названия..... mysql_query("SET NAMES 'cp1251'"); Пробовал. Получаю знаки вопроса) Что делать?
Вот настройкий мускула и пхпадмина

character set client    utf8    
(Global value)    latin1    
character set connection  utf8    
(Global value)    latin1    
character set database    latin1    
character set results      utf8    
(Global value)         latin1    
character set server     latin1    
character set system    utf8    
character sets dir    /usr/local/share/mysql/charsets/    
collation connection    utf8_unicode_ci    
(Global value)    latin1_swedish_ci    
collation database latin1_swedish_ci    
collation server    latin1_swedish_ci


И ещё вопрос. Как увидеть данные из БД на русском? Я так понимаю надо поставить правильно споставление, но вот или не на те кодировки менял или что?)

   
 
 автор: cheops   (16.08.2006 в 16:02)   письмо автору
 
   для: vovik_sumy   (16.08.2006 в 15:14)
 

Где дело происходит на локальной машине или на внешнем сервере, который вы не имеете возможности конфигурировать?

   
 
 автор: vovik_sumy   (16.08.2006 в 17:41)   письмо автору
 
   для: cheops   (16.08.2006 в 16:02)
 

На удалённой машине. Но я могу попросить чтото изменить... Может поймут и исправят. А что можно изменить?

   
 
 автор: cheops   (16.08.2006 в 22:28)   письмо автору
 
   для: vovik_sumy   (16.08.2006 в 17:41)
 

Это российский хостер или зарубежный? Нужно в my.ini или my.cnf добавить директиву
default-character-set=cp1251

в секцию [mysqld].

   
 
 автор: vovik_sumy   (17.08.2006 в 11:01)   письмо автору
 
   для: cheops   (16.08.2006 в 22:28)
 

Спасибо!
Зарубежный...
Я конечно спрошу, а можно без этого? Иной путь есть?

   
 
 автор: cheops   (17.08.2006 в 11:35)   письмо автору
 
   для: vovik_sumy   (17.08.2006 в 11:01)
 

Зарубежный пожалуй ради вас руссифицироваться не станет :))) Вам придётся явно прописывать кодировку и сортировку таблиц при их создании.

   
 
 автор: vovik_sumy   (17.08.2006 в 18:54)   письмо автору
 
   для: cheops   (17.08.2006 в 11:35)
 

Значит мне чтобы сейчас сделать сортировку по алфавиту просто написать SET NAMES cp1251 Перед записью в таблицу?? Я правильно понимаю? Или уже ничего не поможет?:-)

   
 
 автор: cheops   (17.08.2006 в 22:05)   письмо автору
 
   для: vovik_sumy   (17.08.2006 в 18:54)
 

Да, при этом сама таблица должна иметь кодировку cp1251 по умолчанию, а не latin1, если у вас таблица имеет по умолчанию кодировку latin1, её следует изменить при помощи запроса
ALTER TABLE tbl DEFAULT CHARSET=cp1251 COLLATE cp1251_general_ci;

   
 
 автор: vovik_sumy   (18.08.2006 в 13:11)   письмо автору
32.9 Кб
 
   для: cheops   (17.08.2006 в 22:05)
 

Сделал именно так. А теперь отображаются знаки вопроса вместо русского текста. ( что видно во вложении) Как быть? Collation столбиков все ещё в latin1_swedish_ci. Может это быть причиной?

   
 
 автор: vovik_sumy   (18.08.2006 в 13:19)   письмо автору
9.5 Кб
 
   для: vovik_sumy   (18.08.2006 в 13:11)
 

А сама обычная выборка с ORDER by name даёт такое

1????
????
??????
??????
??????
акрилловые
Комлектующие разные
Комлектующие для ванн
Комлектующие для душевых кабин
деревянные
чугунные

Врочем в БД почти тоже самое)

   
 
 автор: cheops   (18.08.2006 в 15:36)   письмо автору
 
   для: vovik_sumy   (18.08.2006 в 13:19)
 

Удалите знаки вопроса, если дальше будет использовать SET NAMES и правльную кодировку самой таблицы - они больше не появятся, с сами знаками вопроса уже ничего сделать нельзя - текст искажён не обратимо.

   
 
 автор: vovik_sumy   (18.08.2006 в 16:16)   письмо автору
 
   для: cheops   (18.08.2006 в 15:36)
 

Я добавлял эти строки через пхпмайадмин. Сейчас попробую через скрипт.
..
Попробовал. Знаки вопроса решили не исчезать) Новости с SET NAMES (поставил после mysql_connect) и выполнив ALTER стали знаками вопроса....

Помогло только когда я для каждого поля в конструкторе таблиц задал кодировку.... Но данные переливал заново.

   
 
 автор: cheops   (18.08.2006 в 19:30)   письмо автору
 
   для: vovik_sumy   (18.08.2006 в 16:16)
 

ALTER TABLE нужно выполнять один раз в жизни таблицы, вообще до любых изменений. SET NAMES следует выполнять один раз после соединения с базой данных. При выводе информации SET NAMES тоже следует использовать.

   
 
 автор: vovik_sumy   (19.08.2006 в 01:11)   письмо автору
 
   для: cheops   (18.08.2006 в 19:30)
 

Cheops,
Сегодня говорил с хостером. Оказывается на нём целиком русские ресурсы. И до сих пор они сами не знают как правильно настроить БД. Может подскажите как им помочь? :-)

   
 
 автор: cheops   (19.08.2006 в 11:30)   письмо автору
 
   для: vovik_sumy   (19.08.2006 в 01:11)
 

Пусть пропишут в my.ini в секции [mysqld]
[mysqld]
default-character-set=cp1251
init_connect="SET NAMES 'cp1251'"

   
 
 автор: vovik_sumy   (22.08.2006 в 00:53)   письмо автору
 
   для: cheops   (19.08.2006 в 11:30)
 

Казалось бы должно помочь, а не помогло. Мне сказали, что вновь созданные БД были со знаками вопрос(где рус.яз).

   
 
 автор: cheops   (22.08.2006 в 12:11)   письмо автору
 
   для: vovik_sumy   (22.08.2006 в 00:53)
 

Это должно действовать только на новые базы данных и после перезагрузки сервера.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования