2

我开始依赖的一个旧 Perl 脚本( mytop ) 在 MySQL 字符集上出现问题。

my $dbh = DBI->connect($dsn, $config{user}, $config{pass}, { PrintError => 0 });

回报:

Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/local/share/mysql/charsets/Index.xml' file

$DBI::errstr

Can't initialize character set utf8mb4 (path: /usr/local/share/mysql/charsets/)

然而 ,SHOW CHARSET;两者都揭示了utf8utf8mb4mysql/charsets/Index.xml只显示了utf8

我发现的一种解决方案是进行编辑mysql/charsets/Index.xml以进行更改:

<charset name="utf8"><charset name="utf8mb4">

这实际上适用于 perl 脚本,但不幸的是从某些 MySQL 客户端(如 MySQL Workbench 和 PHPMyAdmin)中删除utf8SHOW CHARSET;禁用。

我还能如何解决此错误?

显然utf8mb4已经编译并可用,尽管有错误。我尝试在中添加utf8mb4别名,<charset name="utf8">但这Index.xml也不起作用。


这是我试图过去的相关数据库连接代码:

my $dbh = DBI->connect($dsn, $config{user}, $config{pass},
                       { PrintError => 0 });

if (not ref $dbh)
{
    die $DBI::errstr;
}

以下是相关my.cnf设置:

[client]
default-character-set           = utf8mb4

[mysql]
default-character-set           = utf8mb4

[mysqld]
character-set-client-handshake  = FALSE
character_set_server            = utf8mb4
collation_server                = utf8mb4_unicode_ci
4

2 回答 2

0

我可以通过my.cnf如下编辑来解决这个问题。但我不确定我是否造成了未知的麻烦。

my.cnf

[client]
default-character-set           = utf8                   # changed from utf8mb4

[mysql]
default-character-set           = utf8                   # changed from utf8mb4

[mysqld]                                                 # left [mysqld] as is
character-set-client-handshake  = FALSE
character_set_server            = utf8mb4
collation_server                = utf8mb4_unicode_ci
于 2014-08-14T12:32:57.660 回答
0

我在使用 xtrabackup 时遇到了同样的错误。我在 my.cnf 中添加了这段代码,它解决了这个问题:

[xtrabackup]
default-character-set           = utf8 

在连接到其他服务器时,我将 my.cnf 中的 [client] 和 [mysql] 部分保留为 utf8mb4。

由于 xtrabackup 进行二进制备份,我认为仅将 utf8 设置为 xtrabackup 不会对备份数据产生任何副作用。

我不知道是否有使用 perl 进行连接的解决方案。也许您应该找到一种方法让您的脚本读取 my.cnf 并为脚本创建一个自定义部分以读取自定义“默认字符集”

编辑:

我已经搜索并找到了解决方案,如果可行,请检查此。在创建连接之前设置它:

mysql_read_default_group = "perl"

并在您的 my.cnf 中创建一个自定义部分

[perl]
default-character-set           = utf8 
于 2014-10-08T02:07:15.280 回答