- Код: Выделить все
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');
и выполнить SQL команду сразу после подключения к серверу:
- Код: Выделить все
mysql_options(&mysql,MYSQL_INIT_COMMAND, 'SET NAMES utf8');
Вызывать эту функцию нужно сразу после вызова mysql_init() и перед mysql_connect() или mysql_real_connect(). Однако добавление опции UTF8 результата не дало - русский текс так и показывается вопросительными знаками.
Для подтверждения того, что в базе русский текст лежит в UTF8 написал простой перловый скрипт:
- Код: Выделить все
#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
binmode STDOUT, ":utf8";
use DBI;
use Data::Dumper;
my $db_host = 'localhost';
my $db_name = 'pluto_main';
my $db_user = 'root';
my $db_pass = '';
my $dbh = DBI->connect("dbi:mysql:$db_name;host=$db_host", $db_user, $db_pass) or die "Cannot connect to $db_name: $DBI::err!";
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
my $query = "SELECT FK_Text, Description FROM Text_LS WHERE FK_Language=5";
my $res = $dbh->prepare($query) or die "Cannot prepare query: $DBI::err!";
my $rv = $res->execute() or die "Cannot execute query: $DBI::err!";
my $result = $res->fetchall_arrayref({});
my $count = 0;
for my $row (@$result) {
my $msg = $row->{Description};
print "$row->{FK_Text}: " . $msg . "\n";
}
$dbh->disconnect();
Весь русский текс в выводе скрипта отображается правильно. Но если закомментировать строчки
- Код: Выделить все
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');
то вместо русских букв выводятся вопросительные знаки. Отсюда делаю вывод, что что-то в с-шном клиенте не доделал или сделал не правильно. Если у кого есть опыт работы с UFT8 базами данных из C++ приложения на Линуксе, просьба поделиться опытом, чтобы в конце концов решить эту проблему.
