Проблемы с кодировкой в MySQL 5
Столкнулся с проблемой кодировки при переходе из MySQL 4 в MySQL 5.
Это вечная проблема, которая возникает при переходе из одной версии MySQL в другую и связана с поддерживаемыми кодовыми страницами.
При переходе из MySQL 3 в MySQL 4 была проблема с кодировками, т.к. в MySQL 3 они не указывались, а в MySQL 4 стали указываться.
При переходе же из версии MySQL 4 в MySQL 5 проблема связана с тем, что в 5-й версии уже используется универсальная кодировка utf-8.
Т.к. проблема достаточно частая, в инете полно информации.
Например:
http://forum.php-myadmin.ru/viewtopic.php?id=32&p=2
http://forum.php-myadmin.ru/viewtopic.php?pid=410#p410
http://dev.mysql.com/doc/refman/4.1/en/cha...conversion.html
В этом же форуме, я хочу подбить определённый результат, как эту проблему решить.
1. Прежде всего, нужно указать по умолчанию русские кодировки.
2. После вызова коннекта в PHP необходимо указать, что кодировка, например, cp1251
Так, например, в phpNuke я указал в файле mainfile.php после коннекта:
// Rudjuk 24.06.2007 Change Error Code
if ($db){
$db->sql_query("set names 'cp1251'");
}
После этого должно работать.
Кстати, при переносе данных из одного сервера, скажем MySQL 4 на другой с MySQL 5 следует обязательно после коннекта к базе (вначале дампа) указать:
Код
SET NAMES CP1251
Еще осталась проблема с автоматическим определением кодировки.
Почему-то по умолчанию определяется на странице, что кодировка utf-8, хотя указано явно
Код
< meta http-equiv="content-type" content="text/html; charset=windows-1251" />
В apache2 указывается кодировка по умолчанию в файле /etc/apache2/conf.d/charset, нужно просто вместо UTF-8 указать
AddDefaultCharset windows-1251
Что и говорить проблемы с кодировкой - часто встречаемая проблема.
Как её решить, прекрасно описано в статье: Решение проблем с кодировкой
Какая кодировка настроена в MySQL вы можете узнать с помощью запроса:
Код
SHOW VARIABLES LIKE 'character_set_client';
Кроме того, когда создаёте базу и таблицы не забывайте указывать кодировки, например:
Код
CREATE DATABASE `inv2_neru` CHARACTER SET cp1251 COLLATE cp1251_bin COLLATE cp1251_bin;
^
CREATE TABLE `ibf_admin_login_logs` (
`admin_id` int(10) NOT NULL auto_increment,
`admin_ip_address` varchar(16) NOT NULL default '0.0.0.0',
`admin_username` varchar(40) NOT NULL default '',
`admin_time` int(10) unsigned NOT NULL default '0',
`admin_success` int(1) unsigned NOT NULL default '0',
`admin_post_details` text,
PRIMARY KEY (`admin_id`),
KEY `admin_ip_address` (`admin_ip_address`),
KEY `admin_time` (`admin_time`)
) TYPE=MyISAM AUTO_INCREMENT=84 CHARACTER SET cp1251 COLLATE cp1251_bin;
^
Это вечная проблема, которая возникает при переходе из одной версии MySQL в другую и связана с поддерживаемыми кодовыми страницами.
При переходе из MySQL 3 в MySQL 4 была проблема с кодировками, т.к. в MySQL 3 они не указывались, а в MySQL 4 стали указываться.
При переходе же из версии MySQL 4 в MySQL 5 проблема связана с тем, что в 5-й версии уже используется универсальная кодировка utf-8.
Т.к. проблема достаточно частая, в инете полно информации.
Например:
http://forum.php-myadmin.ru/viewtopic.php?id=32&p=2
http://forum.php-myadmin.ru/viewtopic.php?pid=410#p410
http://dev.mysql.com/doc/refman/4.1/en/cha...conversion.html
В этом же форуме, я хочу подбить определённый результат, как эту проблему решить.
1. Прежде всего, нужно указать по умолчанию русские кодировки.
2. После вызова коннекта в PHP необходимо указать, что кодировка, например, cp1251
Так, например, в phpNuke я указал в файле mainfile.php после коннекта:
// Rudjuk 24.06.2007 Change Error Code
if ($db){
$db->sql_query("set names 'cp1251'");
}
После этого должно работать.
Кстати, при переносе данных из одного сервера, скажем MySQL 4 на другой с MySQL 5 следует обязательно после коннекта к базе (вначале дампа) указать:
Код
SET NAMES CP1251
Еще осталась проблема с автоматическим определением кодировки.
Почему-то по умолчанию определяется на странице, что кодировка utf-8, хотя указано явно
Код
< meta http-equiv="content-type" content="text/html; charset=windows-1251" />
В apache2 указывается кодировка по умолчанию в файле /etc/apache2/conf.d/charset, нужно просто вместо UTF-8 указать
AddDefaultCharset windows-1251
Что и говорить проблемы с кодировкой - часто встречаемая проблема.
Как её решить, прекрасно описано в статье: Решение проблем с кодировкой
Какая кодировка настроена в MySQL вы можете узнать с помощью запроса:
Код
SHOW VARIABLES LIKE 'character_set_client';
Кроме того, когда создаёте базу и таблицы не забывайте указывать кодировки, например:
Код
CREATE DATABASE `inv2_neru` CHARACTER SET cp1251 COLLATE cp1251_bin COLLATE cp1251_bin;
^
CREATE TABLE `ibf_admin_login_logs` (
`admin_id` int(10) NOT NULL auto_increment,
`admin_ip_address` varchar(16) NOT NULL default '0.0.0.0',
`admin_username` varchar(40) NOT NULL default '',
`admin_time` int(10) unsigned NOT NULL default '0',
`admin_success` int(1) unsigned NOT NULL default '0',
`admin_post_details` text,
PRIMARY KEY (`admin_id`),
KEY `admin_ip_address` (`admin_ip_address`),
KEY `admin_time` (`admin_time`)
) TYPE=MyISAM AUTO_INCREMENT=84 CHARACTER SET cp1251 COLLATE cp1251_bin;
^
Комментарии