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

Форум MySQL

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

 

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

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

тема: Кодировка в PHP5.2.1 MySQL5.0.22 Apache2.2.4,
 
 автор: blind   (24.04.2007 в 12:22)   письмо автору
 
 

Не подскажете как добиться в связке
Apache2.2.4/MySQL5.0.22/PHP5.2.1 под Windows
вывод в кодировке или cp1251 или windows1251 ?

----------Коротко о системе и настройках--------
---Windows2000SP4
---Apache/2.2.4 (Win32) PHP/5.2.1

---PHP 5.2.1
default_charset = "cp1251"

---MySQL v5.0.22
в my.ini:
[mysql]
default-character-set=cp1251
[mysqld]
default-character-set=cp1251


----Код создания и заполнения тестовой базы-------
create database if not exists alphabet
DEFAULT CHARACTER SET cp1251
DEFAULT COLLATE cp1251_general_ci;
use alphabet;

drop table if exists bukv;

create table bukv
(
BId INTEGER NOT NULL AUTO_INCREMENT,
Symb tinytext NOT NULL,
Remark VARCHAR(64) NOT NULL,
DateRecord TIMESTAMP(14) NOT NULL,
PRIMARY KEY (BId)
)
DEFAULT CHARACTER SET cp1251;

use alphabet;
INSERT INTO bukv (Symb, Remark) VALUES ("А", "Буква А");
INSERT INTO bukv (Symb, Remark) VALUES ("Б", "");
INSERT INTO bukv (Symb, Remark) VALUES ("В", "");
INSERT INTO bukv (Symb, Remark) VALUES ("Г", "");------------------------------


Вывод с помощью кода, указанного ниже, в неопределенной кодировке:
? - ????? ?
? -
? -
? -

----------Код для вывода данных из базы----------------
$dbserver="localhost";
$dbuser="qwert";
$dbpass="qwert";
$dbname="alphabet";
$dbh=mysql_connect($dbserver, $dbuser, $dbpass);
mysql_select_db($dbname, $dbh);
$result=mysql_query("SELECT *, FROM_UNIXTIME(UNIX_TIMESTAMP(DateRecord)) as timeall FROM bukv ORDER BY Symb");
if (mysql_num_rows($result)>0)
{
while($row=mysql_fetch_array($result))
{
echo $row['Symb']." - ".$row['Remark']."<br>";
}
}----------Код для вывода данных из базы----------------
mysql_close();


А через консоль mysql-я Вывод на русском:
mysql> use alphabet;
Database changed
mysql> select * from bukv;
+-----+------+---------+---------------------+
| BId | Symb | Remark | DateRecord |
+-----+------+---------+---------------------+
| 1 | А | Буква А | 2007-04-24 14:54:00 |
| 2 | Б | | 2007-04-24 14:54:00 |
| 3 | В | | 2007-04-24 14:54:00 |
| 4 | Г | | 2007-04-24 14:54:00 |
+-----+------+---------+---------------------+
4 rows in set (0.00 sec)

   
 
 автор: cheops   (24.04.2007 в 13:17)   письмо автору
 
   для: blind   (24.04.2007 в 12:22)
 

Добавльте в начало дампа
SET NAMES cp1251;

и соответственно используйте этот запрос сразу после установки соединения.

   
 
 автор: Trianon   (24.04.2007 в 13:19)   письмо автору
 
   для: blind   (24.04.2007 в 12:22)
 

кроме этого, перед вызовом консольного клиента, меняйте кодировку самой консоли:

chcp 1251

поскольку она отличается от оконной.

   
 
 автор: blind   (28.04.2007 в 04:37)   письмо автору
 
   для: Trianon   (24.04.2007 в 13:19)
 

Помогло добавление перед выводом из базы:

$sQuery="SET NAMES cp1251";
mysql_query($sQuery);

А в консоли действительно кодировка другая. Опытным путем обнаружил что она всегда cp866
устанавливается командочкой:
mysql>charset cp866;

После этого все данные, независимо в какой кодировке они записывались в базу, выводятся кирилицей. Видимо консольная утилита сама делает перевод из кодировки базы в консольную кодировку cp866;

   
 
 автор: Trianon   (28.04.2007 в 11:04)   письмо автору
 
   для: blind   (28.04.2007 в 04:37)
 

перевод делает сервер, а не клиент. Так тоже можно добавлять и изменять данные, но при таком подходе при создании таблиц из клиента, кодировка хранения тоже станет 866-й (если конечно, не будет объявлена явно), а это не всегда удобно. В общем-то, данные стараются хранить в той кодировке, в которой с ними работает основной процесс.

   
Rambler's Top100
вверх

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