我开始依赖的一个旧 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;
两者都揭示了utf8
,utf8mb4
而mysql/charsets/Index.xml
只显示了utf8
。
我发现的一种解决方案是进行编辑mysql/charsets/Index.xml
以进行更改:
<charset name="utf8">
至<charset name="utf8mb4">
这实际上适用于 perl 脚本,但不幸的是从某些 MySQL 客户端(如 MySQL Workbench 和 PHPMyAdmin)中删除utf8
并SHOW 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