Como se conectar ao MySQL usando UTF8 dentro de um script perl?

Em poucas palavras:

Dentro de um script Perl: Como eu me conecto ao MySQL de uma maneira que permita transmitir o caractere unicode de quatro bytes U + 1F61C ("") do script perl para uma tabela MySQL onde esse caractere deve ser armazenado?

Usando{mysql_enable_utf8 => 1} não resolve o problema.

Em detalhe:

Eu tenho exatamente o mesmo problema descrito na perguntaERRO 1366 (HY000): Valor incorreto da string: '\ xF0 \ x9F \ x98 \ x9C' para a coluna 'comment' na linha 1 e mesmo com o mesmo caractere Unicode (= U + 1F61C =CARA COM LÍNGUA STUCK-OUT E OLHO VENCEDOR) que produz a mensagem de erro

DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x98\x9C' for column ...

Mas eu não uso PHP, eu uso Perl.

A resposta aceita na outra pergunta diz:

Execute o MySQL 5.5 ou posterior.
Eu verifico a versão:

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.7.13-0ubuntu0.16.04.2 |
+-------------------------+

Portanto, é 5,7 o que é posterior a 5,5.
✅ verificado

Defina o caractere da tabela comoutf8mb4.
Verifico o conjunto de caracteres do meu banco de dados, da minha tabela e até da coluna relatada:

mysql> SELECT default_character_set_name FROM information_schema.SCHEMATA 
    -> WHERE schema_name = "myDatabase";
+----------------------------+
| default_character_set_name |
+----------------------------+
| utf8mb4                    |
+----------------------------+

mysql> SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
    ->        information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
    -> WHERE CCSA.collation_name = T.table_collation
    ->   AND T.table_schema = "myDatabase"
    ->   AND T.table_name   = "myTable";
+--------------------+
| character_set_name |
+--------------------+
| utf8mb4            |
+--------------------+

mysql>   SELECT character_set_name FROM information_schema.`COLUMNS` 
    -> WHERE table_schema = "myDatabase"
    ->   AND table_name   = "myTable"
    ->   AND column_name  = "myColumn";
+--------------------+
| character_set_name |
+--------------------+
| utf8mb4            |
+--------------------+

Portanto, meu banco de dados, minha tabela e a coluna relatada usam o conjunto de caracteresutf8mb4.
✅ verificado

Habilite o UTF8 na sua conexão MySQL.
Este parece ser o problema. oresponda a outra pergunta diz:

SET NAMES utf8ou use uma opção ao conectar que o habilite de maneira semelhante.

Não sei comoSET NAMES utf8 dentro de um script perl, então fiz como fiz nos últimos anos. Eu acho que isso é "uma opção ao conectar que, da mesma forma, permite"
É no final da longa fila que começa commy $dbh = DBI->connect:

#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use Encode;
use DBI;
binmode STDOUT, ":utf8";

#Here I connect using the parameter mysql_enable_utf8 (create database handle):
my $dbh = DBI->connect('DBI:mysql:database=myDatabase;host=localhost','aUser','aPassword',{mysql_enable_utf8 => 1});

#Prepare the statement (create statement handle):
my $sth = $dbh->prepare('INSERT INTO `myTable` (`myColumn`) VALUES(?);');

#This doesn't work: 
$sth->execute('');

#This doesn't work either: 
$sth->execute(encode_utf8(''));

#end processing:
$dbh->disconnect();
exit(0);

Ambas as execuções geram o mesmo erro (apenas o número da linha no final é alterado):

DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x98\x9C' for column 'myColumn' at row 1 at myTestScript.pl line 16.

O que estou fazendo errado?
Como posso fazer melhor?

questionAnswers(1)

yourAnswerToTheQuestion