Проблемы с кодировкой
- В базе данных русские буквы сохраняются как ?? или d23k23j23
- В системе данные выводятся в разной кодировке ??? или ÐовоÑ
Советы и решения:
Используйте utf8, collation = utf8_general_ci (для столбцов таблицы)Посмотреть какая кодировка в mysql:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
Изменить кодировку:
- set names utf8;
- при создании таблиц …DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
НЕ помогают
3. Добавить в файл my.cnf в секцию [mysqld] следующий код:
skip-character-set-client-handshake
default-character-set=utf8
init-connect=’SET NAMES utf8?'
default-collation=utf8_general_ci
Перезагрузим сервер
My Sql?:
/etc/init.d/mysql restart
После этого список переменных будет выглядеть так:
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/
посмотреть кракозябры в базе:
SET NAMES latin1;
SELECT * FROM `users`;
utf8 – Русский, latin1 –
???
utf8 -Ðо&; latin1 – Русский
В коде, на Perl
use utf8;
Прагма указывает, что код программы написан в кодировке UTF-8. Строковые константы, константные шаблоны в регулярных выражениях и имена переменных будут рассматриваться как строки в UTF-8 кодировке. Прагма utf8 не влияет на работу потоков ввода/вывода
use encoding UTF-8;
Многофункциональная прагма. Позволяет явно указать кодировку в которой написан ваш скрипт, а также вы можете управлять поведением стандартных потоков ввода/вывода (STD{IN|OUT})
Пример: use encoding 'cp1251', STDOUT => 'koi8-r';
use open; (прагма)
Прагма open – это вспогательный интерфейс для определения «уровеней» по умолчанию для всех потоков ввода/вывода.
Пример:
use open IN => :crlf; # из какой кодировки преобразовывать данные из стандартного потока ввода.
use open OUT => ':utf8'; # в какой кодировке интерпретатор должен выводить данные в стандартный поток вывода
use open ':locale'; # в соответствии с установленной в системе локалью
use open ':encoding(cp1251)'; # задать кодировку явно
use open ':std'; # Подпрагма :std сама по себе ни на что не влияет, но в сочетании с подпрагмой :utf8 или :encoding она назначает выбранную кодировку для стандартных файловых манипуляторов (STDIN, STDOUT, STDERR).
use open ':utf8'; # только для файлов
use open qw(:std :utf8); # файлы и STD*
> perl -e 'print "${^UNICODE}\n"'
0