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