MyWackoSite : NsuTs/Documentation/devguide/db/encodingproblems

Проблемы с кодировкой

  1. В базе данных русские буквы сохраняются как ?? или d23k23j23
  2. В системе данные выводятся в разной кодировке ??? или ÐÐ¾Ð²Ð¾Ñ

Советы и решения:

Используйте utf8, collation = utf8_general_ci (для столбцов таблицы)

Посмотреть какая кодировка в mysql:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Изменить кодировку:

  1. set names utf8;
  2. при создании таблиц …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