mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-04 03:26:19 +00:00
Merge pull request #788 from percona/PT-2264_pt-query-digest_Pipeline_process_11_--output_slowlog_caused_an_error_Wide_character
PT-2264 - pt-query-digest Pipeline process 11 (--output slowlog) caused an error: Wide character
This commit is contained in:
@@ -1611,21 +1611,48 @@ sub get_dbh {
|
||||
if ( $cxn_string =~ m/mysql/i ) {
|
||||
my $sql;
|
||||
|
||||
if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) {
|
||||
my ($charset) = $cxn_string =~ m/charset=([\w]+)/;
|
||||
if ( $charset ) {
|
||||
$sql = qq{/*!40101 SET NAMES "$charset"*/};
|
||||
PTDEBUG && _d($dbh, $sql);
|
||||
eval { $dbh->do($sql) };
|
||||
if ( $EVAL_ERROR ) {
|
||||
die "Error setting NAMES to $charset: $EVAL_ERROR";
|
||||
}
|
||||
PTDEBUG && _d('Enabling charset for STDOUT');
|
||||
if ( $charset eq 'utf8' ) {
|
||||
binmode(STDOUT, ':utf8')
|
||||
or die "Can't binmode(STDOUT, ':utf8'): $OS_ERROR";
|
||||
}
|
||||
else {
|
||||
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
|
||||
if ( $EVAL_ERROR ) {
|
||||
die "Cannot get MySQL version: $EVAL_ERROR";
|
||||
}
|
||||
else {
|
||||
binmode(STDOUT) or die "Can't binmode(STDOUT): $OS_ERROR";
|
||||
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
|
||||
if ( $EVAL_ERROR ) {
|
||||
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
|
||||
if ( $mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/ ) {
|
||||
if ( $1 >= 8 && $character_set_server =~ m/^utf8/ ) {
|
||||
$dbh->{mysql_enable_utf8} = 1;
|
||||
$charset = $character_set_server;
|
||||
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
|
||||
"Setting: SET NAMES $character_set_server";
|
||||
PTDEBUG && _d($msg);
|
||||
eval { $dbh->do("SET NAMES '$character_set_server'") };
|
||||
if ( $EVAL_ERROR ) {
|
||||
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
PTDEBUG && _d('Enabling charset for STDOUT');
|
||||
if ( $charset && $charset =~ m/^utf8/ ) {
|
||||
binmode(STDOUT, ':utf8')
|
||||
or die "Can't binmode(STDOUT, ':utf8'): $OS_ERROR";
|
||||
binmode(STDERR, ':utf8')
|
||||
or die "Can't binmode(STDERR, ':utf8'): $OS_ERROR";
|
||||
}
|
||||
else {
|
||||
binmode(STDOUT) or die "Can't binmode(STDOUT): $OS_ERROR";
|
||||
}
|
||||
|
||||
if ( my $vars = $self->prop('set-vars') ) {
|
||||
@@ -1651,28 +1678,6 @@ sub get_dbh {
|
||||
. ": $EVAL_ERROR";
|
||||
}
|
||||
}
|
||||
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot get MySQL version: $EVAL_ERROR";
|
||||
}
|
||||
|
||||
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
|
||||
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
|
||||
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
|
||||
$dbh->{mysql_enable_utf8} = 1;
|
||||
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
|
||||
"Setting: SET NAMES $character_set_server";
|
||||
PTDEBUG && _d($msg);
|
||||
eval { $dbh->do("SET NAMES 'utf8mb4'") };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PTDEBUG && _d('DBH info: ',
|
||||
$dbh,
|
||||
|
Reference in New Issue
Block a user