use strict; use warnings; use utf8; use Test::More; use DBI; use vars qw($test_user $test_password $test_dsn); use lib 't', '.'; require 'lib.pl'; my $tb = Test::More->builder; binmode $tb->output, ":utf8"; binmode $tb->failure_output, ":utf8"; binmode $tb->todo_output, ":utf8"; my $dbh = DbiTestConnect($test_dsn, $test_user, $test_password, { RaiseError => 1, PrintError => 0, AutoCommit => 0 }); my $utf8mb4 = $dbh->selectrow_array("SHOW CHARSET LIKE 'utf8mb4'") ? 1 : 0; plan tests => 11*2*2; for my $mariadb_server_prepare (0, 1) { $dbh->{mariadb_server_prepare} = $mariadb_server_prepare; for my $ins ("\xC3", "\N{U+C3}", "\xC3\xA1", "\N{U+C3}\N{U+A1}", "á", "č", "\x{263A}", "\N{U+263A}", "☺", "\N{U+1F4A9}", "💩") { SKIP: { skip 'Server does not support utf8mb4', 1 if $ins =~ /[^\x{0000}-\x{FFFF}]/ and not $utf8mb4; $dbh->do("CREATE TEMPORARY TABLE t(s VARCHAR(10))"); my $sth = $dbh->prepare("INSERT INTO t(s) VALUES('$ins')"); $sth->execute(); my $fetch = $dbh->selectrow_array("SELECT s FROM t"); is($fetch, $ins, "test $ins without bind"); $dbh->do("DROP TEMPORARY TABLE t"); } SKIP: { skip 'Server does not support utf8mb4', 1 if $ins =~ /[^\x{0000}-\x{FFFF}]/ and not $utf8mb4; $dbh->do("CREATE TEMPORARY TABLE t(s VARCHAR(10))"); my $sth = $dbh->prepare("INSERT INTO t(s) VALUES(?)"); $sth->execute($ins); my $fetch = $dbh->selectrow_array("SELECT s FROM t"); is($fetch, $ins, "test $ins with bind"); $dbh->do("DROP TEMPORARY TABLE t"); } } } $dbh->disconnect();