Wie kann ich mit UTF8 innerhalb eines Perl-Skripts eine Verbindung zu MySQL herstellen?

In einer Nussschale

In einem Perl-Skript: Wie verbinde ich mich mit MySQL so, dass das 4-Byte-Unicode-Zeichen U + 1F61C ("") aus dem Perl-Skript in eine MySQL-Tabelle übertragen werden kann, in der dieses Zeichen gespeichert werden soll?

Using{mysql_enable_utf8 => 1} löst das Problem nicht.

Im Detail

Ich habe genau das gleiche Problem wie in der Frage @ beschriebERROR 1366 (HY000): Falscher Zeichenfolgenwert: '\ xF0 \ x9F \ x98 \ x9C' für Spalte 'Kommentar' in Zeile 1 und sogar mit demselben Unicode-Zeichen (= U + 1F61C =FACE WITH STUCK-OUT TONGUE UND WINKING EYE) was die Fehlermeldung erzeugt

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

Aber ich benutze kein PHP, ich benutze Perl.

Die akzeptierte Antwort in der anderen Frage lautet:

Führen Sie MySQL 5.5 oder höher aus.
Ich überprüfe die Version:

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

So ist es 5.7, was später als 5.5 ist.
✅geprüft

etze das Zeichen der Tabelle aufutf8mb4.
Ich überprüfe den Zeichensatz meiner Datenbank, meiner Tabelle und sogar der gemeldeten Spalte:

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            |
+--------------------+

Also verwenden meine Datenbank, meine Tabelle und die gemeldete Spalte den Zeichensatzutf8mb4.
✅geprüft

Aktivieren Sie UTF8 auf Ihrer MySQL-Verbindung.
Dies scheint das Problem zu sein. Das Antwort auf die andere Frage sagt:

SET NAMES utf8, oder verwenden Sie beim Verbinden eine Option, die dies ebenfalls ermöglicht.

Ich weiß nicht, wie manSET NAMES utf8 innerhalb eines Perl-Skripts, also habe ich es so gemacht, wie ich es in den letzten Jahren gemacht habe. Ich denke, das ist " eine Option beim Verbinden, die es auf ähnliche Weise aktiviert ".
Es ist am Ende der langen Schlange, die mit @ beginmy $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);

Beide Ausführungen lösen denselben Fehler aus (nur die Zeilennummer am Ende ändert sich):

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

Was mache ich falsch
Wie kann ich es besser machen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage