|
|
|
| Не подскажете как добиться в связке
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) | |
|
|
|
|
|
|
|
для: blind
(24.04.2007 в 12:22)
| | Добавльте в начало дампа
и соответственно используйте этот запрос сразу после установки соединения. | |
|
|
|
|
|
|
|
для: blind
(24.04.2007 в 12:22)
| | кроме этого, перед вызовом консольного клиента, меняйте кодировку самой консоли:
поскольку она отличается от оконной. | |
|
|
|
|
|
|
|
для: Trianon
(24.04.2007 в 13:19)
| | Помогло добавление перед выводом из базы:
$sQuery="SET NAMES cp1251";
mysql_query($sQuery);
|
А в консоли действительно кодировка другая. Опытным путем обнаружил что она всегда cp866
устанавливается командочкой:
После этого все данные, независимо в какой кодировке они записывались в базу, выводятся кирилицей. Видимо консольная утилита сама делает перевод из кодировки базы в консольную кодировку cp866; | |
|
|
|
|
|
|
|
для: blind
(28.04.2007 в 04:37)
| | перевод делает сервер, а не клиент. Так тоже можно добавлять и изменять данные, но при таком подходе при создании таблиц из клиента, кодировка хранения тоже станет 866-й (если конечно, не будет объявлена явно), а это не всегда удобно. В общем-то, данные стараются хранить в той кодировке, в которой с ними работает основной процесс. | |
|
|
|