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

Форум MySQL

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

 

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

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

тема: неправильная кодировка при вставке значений из файла в MySQL
 
 автор: Luce   (25.01.2009 в 23:52)   письмо автору
 
 

Возникла такая проблема.
Есть код, который извлекает несколько русских строк из файла и вставляет их в базу данных. В таблице эти строчки почему-то выглядят как "????????????" (и при просмотре через PHPMyAdmin, и при выводе на экран). Если вставлять текст через PHPMyAdmin, то всё нормально. Кодировка в таблице Win 1251, а кодировку файла, из которого извлекают значения, не знаю, как установить (пробовала сохранять в ANSI, но результат тот же).

Это часть кода, которая извлекает слова и вставляет в БД:
<?
...
mysql_query("SET CHARSET cp1251;");
$file_array=file($file);
 if (!
$file_array)
     { echo 
$file." - ошибка открытия";}
 else 
 {                    
    
$array_keywords=explode(",",$file_array[0]);
    
$title_words=$file_array[2];
    
$query="INSERT INTO ".$dbfiles." VALUES ('".$file."','".$file_array[1]."','".$title_words."','')";
     
$a=mysql_query($query);
....
?>


На хосте PHP 5.2.8, MySQL ver. 5.0.51-community. На локалхосте всё работает правильно, буквы нормальные в таблицах (MySQL 4.1.8-max, PHP 4).

  Ответить  
 
 автор: Trianon   (26.01.2009 в 00:03)   письмо автору
 
   для: Luce   (25.01.2009 в 23:52)
 

Вероятно, всё же кодировка у таблицы при её создании (или при создании БД) была прописана другая, отличная от cp1251.
Что показывает запрос SHOW VARIABLES LIKE '%char%';
?

  Ответить  
 
 автор: Luce   (26.01.2009 в 00:09)   письмо автору
 
   для: Trianon   (26.01.2009 в 00:03)
 

В таблице я указала сравнение текстовых полей cp1251_general_ci (установлено запросами, сгенерированными PHPMyAdmin на локалхосте).

На запрос отвечает:
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Помогите разобраться, пожалуйста.

  Ответить  
 
 автор: Trianon   (26.01.2009 в 00:23)   письмо автору
 
   для: Luce   (26.01.2009 в 00:09)
 

Это запрос SQL.
Но отклик действительно интересно посмотреть именно в php, причем после запроса SET CHARSET
сделать это можно примерно так:
<?
...
mysql_conect(...);
mysql_select_db(...);
mysql_query("SET CHARSET cp1251;");
$res mysql_query("SHOW VARIABLES LIKE '%char%'");
for(;
$row mysql_fetch_row($res); print('<br>'))
  foreach(
$row as $val) echo $val.' ';

  Ответить  
 
 автор: Luce   (26.01.2009 в 11:43)   письмо автору
 
   для: Trianon   (26.01.2009 в 00:23)
 

На такой запрос выдаёт:

character_set_client
cp1251
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results cp1251
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Когда значения считываются из файла и тут же выводятся на экран - проблемы нет, всё отображается нормально.

  Ответить  
 
 автор: Trianon   (26.01.2009 в 11:48)   письмо автору
 
   для: Luce   (26.01.2009 в 11:43)
 

>character_set_connection latin1

Это значит что база данных (а с ней, наверняка, и таблица) создана в кодировке latin1, и хранить русский текст не может.

Кодировку БД можно изменить (если есть на то соответствующие привилегии) из phpMyAdmin,
из закладки "Операции" страницы управления Вашей БД.

Таблицы придется после этого удалить и создать заново.

  Ответить  
 
 автор: Luce   (26.01.2009 в 11:53)   письмо автору
 
   для: Trianon   (26.01.2009 в 11:48)
 

Большое спасибо, всё теперь так, как надо!

  Ответить  
Rambler's Top100
вверх

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