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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблемы с кодировкой

Сообщения:  [1-9] 

 
 автор: viera1   (20.11.2007 в 11:10)   письмо автору
 
   для: Trianon   (20.11.2007 в 01:44)
 

Спасибо Вам огромное, всё теперь хорошо. Я тоже заметила эту арабскую кодировку 1256, но не знала, как её поменять. Спасибо!

   
 
 автор: Trianon   (20.11.2007 в 01:44)   письмо автору
 
   для: viera1   (19.11.2007 в 21:58)
 

мало поменять кодировку соединения.
Нужно еще изменить кодировку базы данных перед тем, как создавать таблицы в ней.
Сделать это можно оператором

ALTER DATABASE `ИмяБД` 
    DEFAULT CHARACTER SET cp1251 
    COLLATE cp1251_general_ci


А сейчас у Вас БД в кодировке cp1256, которая наверняка с cp1251 в части русских букв не пересекается.
Конечно, в таком раскладе менять сессионную кодировку недостаточно - БД просто не в состоянии хранить русские символы.

   
 
 автор: viera1   (19.11.2007 в 21:58)   письмо автору
 
   для: cheops   (19.11.2007 в 11:43)
 

Я обработала выполнение UPDATE-оператора, как Вы посоветовали, но результат тот же.
Нет сообщений об ошибке, возвращаются ??????.

После выполнения SET NAMES cp1251; операторы
SHOW SESSION VARIABLES LIKE 'char%';
SHOW LOCAL VARIABLES LIKE 'char%';
SHOW VARIABLES LIKE 'char%';
Показывают один и тот же набор:


character_set_client      utf8
character_set_connection     utf8
character_set_database     cp1256
character_set_filesystem     binary
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8

   
 
 автор: cheops   (19.11.2007 в 11:43)   письмо автору
 
   для: viera1   (18.11.2007 в 14:38)
 

>Я делаю запрос
>SHOW VARIABLES LIKE 'char%'.
>А как я могу увидеть состояние сессионных переменных?
Воспользуйтесь оператором
SHOW SESSION VARIABLES LIKE 'char%'

или
SHOW LOCAL VARIABLES LIKE 'char%'


Обработайте выполнение UPDATE-оператора - он не возвращает ошибок
<?php
  
if(!mysql_query ($sql)) exit(mysql_error());
?>

   
 
 автор: viera1   (18.11.2007 в 14:38)   письмо автору
 
   для: cheops   (18.11.2007 в 12:55)
 

Я делаю запрос
SHOW VARIABLES LIKE 'char%'.
А как я могу увидеть состояние сессионных переменных?

В качестве теста я запускаю маленький скрипт:
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
  @mysql_select_db($dbname,$dbcnx);
  
   mysql_query ("SET NAMES cp1251");
   mysql_query("SET CHARACTER SET cp1251");
   
   $result=mysql_query ("SELECT * FROM test");
   for ($data=array(); $row=@mysql_fetch_assoc($result); $data[]=$row);
   $name=$data[0][name];
   echo "name = ".$name."<br>";
    
    $sql = "UPDATE `test` SET `name` = 'Главная1' ;";
    echo $sql;
    mysql_query ($sql);
        
        
    $result=mysql_query ("SELECT * FROM test");
    for ($data=array(); $row=@mysql_fetch_assoc($result); $data[]=$row);
    $name=$data[0][name];
    echo "<br>name = ".$name."<br>";    


Ответ следующий:

name = Главная
UPDATE `test` SET `name` = 'Главная1' ;
name = ???????1

   
 
 автор: cheops   (18.11.2007 в 12:55)   письмо автору
 
   для: viera1   (17.11.2007 в 14:49)
 

>но переменные остаются такие же, как я привела выше.
А вы как это проверяете? Дело в том, что SET NAMES меняет состояние не глобальных, а сессионных переменных.

   
 
 автор: viera1   (17.11.2007 в 14:49)   письмо автору
 
   для: cheops   (17.11.2007 в 12:37)
 

Пишет:
Ваш SQL-запрос был успешно выполнен.
В документации написано, что "SET NAMES" меняет переменные "character_set_client" , "character_set_results" , "character_set_connection" ,
но переменные остаются такие же, как я привела выше.
Все попытки объясниться с хостером свелись к следующему:
"Unfortunately we only support the current Character set. You cannot change this, the permissions do not allow it. This will not be changed. We apologize for the inconvenience. "
То ли они не понимают, что мне нужно, то ли отказываются что-то делать со своей стороны.

   
 
 автор: cheops   (17.11.2007 в 12:37)   письмо автору
 
   для: viera1   (17.11.2007 в 12:06)
 

Что пишет в ответ на SET NAMES cp1251;? Странно почему вы не имеете право выполнять этот запрос - дело клиента, в какой кодировке будет проходить текущий сеанс связи с сервером - на другие сеансы это никак не влияет.

   
 
 автор: viera1   (17.11.2007 в 12:06)   письмо автору
 
 

Что можно сделать в следующей ситуации:

Хостер у сайта зарубежный, версия MySQL 5.0.45

Установки MySQL следующие:
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database cp1256
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8

Менять эти переменные я не могу, нет прав, то есть "SET NAMES cp1251;" и "SET CHARACTER SET cp1251;" не выполняются.

В базе всё хорошо, всё по-русски.
Из базы на сайт mysql SELECT извлекает русские слова, но если я делаю INSERT или UPDATE из админки, то получаю в базе ??????.
Можно что-нибудь сделать с моей стороны или остается менять хостера?

   

Сообщения:  [1-9] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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