Незнам дали съм избрал правилния раздел на форума, ако не, моля да ме извините.
На пръв поглед проблема е банален и разискван много пъти ... ама наистина много, но ...
OS: Fedora Core 5
Kernel v: 2.6.17-1
PHP: 5.1.6 release 1.2
MySQL: 5.0.27 release 1.fc5
Apache: 2.2.2 release 1.2
Прехвърлям малка база данни от машина с дебиан на машина с по-горните версии на софтуерите под федора.
Данните на машината от която прехвърлям базата:
OS: Debian sarge
Kernel v: 2.6.8-2
PHP: 4.4.3
MySQL: 4.1.11
Apache: 2.0.54
При прехвърлянето използвам mysqldump, и данните се записват във файл с utf-8 кодировка. За това съм сигурен защото федората е настроена с utf-8 локал и през MidnightCommander разчитам кирилицата без проблем. Данните се записаха в новата база също без проблем, като през phpmyadmin ги разчитам. А и като направя заявка директно през mysql данните пак се четат. Което според мен означава, че данните са правилно записани в базата. Web сървъра също няма проблем с UTF-8 - страничките които използват тази база са писани с така кодировка и нямам проблем с тях. Но когато настъпи момента да изкарвам в страничка данните от базата ... излизат само въпросителни.
По-надолу съм дал текущите настройки в my.cnf, httpd.conf, php.ini. Навсякъде, мисля където трябва, съм указал, че трябва да се използва utf-8 кодиране на символите. Струва ми се, че объркването настъпва между php-то и резултатите от sql заявките, но как да контролирам и там процеса? Ако може да помоля за помощ, защото ми се изчерпаха идеите.
my.cnf
Цитат |
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 character_set_server=utf8 default_character_set=utf8 collation_server=utf8_general_ci
[mysql.server] user=mysql basedir=/var/lib
[client] default_character_set=utf8
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
|
httpd.conf
Цитат |
... # Specify a default charset for all content served; this enables # interpretation of all content as UTF-8 by default. To use the # default browser choice (ISO-8859-1), or to allow the META tags # in HTML content to override this choice, comment out this # directive: # AddDefaultCharset UTF-8
# ...
|
php.ini
Цитат |
... ; As of 4.0b4, PHP always outputs a character encoding by default in ; the Content-type: header. To disable sending of the charset, simply ; set it to be empty. ; ; PHP's built-in default is text/html default_mimetype = "text/html" default_charset = "UTF-8" ...
|
SHOW VARIABLES LIKE 'char%';
Цитат |
mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
|
MySQL server status
Цитат |
... SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.27 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 32 min 48 sec
|