|
|
|
| Возникла такая проблема.
Есть код, который извлекает несколько русских строк из файла и вставляет их в базу данных. В таблице эти строчки почему-то выглядят как "????????????" (и при просмотре через 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). | |
|
|
|
|
|
|
|
для: Luce
(25.01.2009 в 23:52)
| | Вероятно, всё же кодировка у таблицы при её создании (или при создании БД) была прописана другая, отличная от cp1251.
Что показывает запрос SHOW VARIABLES LIKE '%char%';
? | |
|
|
|
|
|
|
|
для: 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/
Помогите разобраться, пожалуйста. | |
|
|
|
|
|
|
|
для: 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.' ';
|
| |
|
|
|
|
|
|
|
для: 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/
Когда значения считываются из файла и тут же выводятся на экран - проблемы нет, всё отображается нормально. | |
|
|
|
|
|
|
|
для: Luce
(26.01.2009 в 11:43)
| | >character_set_connection latin1
Это значит что база данных (а с ней, наверняка, и таблица) создана в кодировке latin1, и хранить русский текст не может.
Кодировку БД можно изменить (если есть на то соответствующие привилегии) из phpMyAdmin,
из закладки "Операции" страницы управления Вашей БД.
Таблицы придется после этого удалить и создать заново. | |
|
|
|
|
|
|
|
для: Trianon
(26.01.2009 в 11:48)
| | Большое спасибо, всё теперь так, как надо! | |
|
|
|