Ermitteln der PHP/MySQL-Codierungsunterschiede auf zwei Maschinen: MySQL-Fehler 1366 nur auf einer Maschine [Duplikat]Php

PHP-Programmierer chatten hier
Anonymous
 Ermitteln der PHP/MySQL-Codierungsunterschiede auf zwei Maschinen: MySQL-Fehler 1366 nur auf einer Maschine [Duplikat]

Post by Anonymous »

Ich habe einen PHP-PDO-Code, der Daten von einer Tabelle (wp_posts) in eine andere (eine relationale Tabellenstruktur) kopiert. Dies ist im gleichen Schema mit Standard
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
für alle Tabellen. Es schlägt fehl, wenn ich auf Emoji stoße (das erste, das ich getroffen habe, war 🔊 \xF0\x9F\x94\x8A).
Ich gebe „utf8mb4“ in der PDO-DSN-Zeichenfolge an. Ich habe versucht, ;collate=utf8mb4_unicode_520_ci hinzuzufügen, was meiner Meinung nach nichts ändern würde, was aber auch nicht der Fall war.
Ich kann manuell (über die Konsole) eine Zeile mit genau derselben Zeichenfolge ohne Fehler in die neue Tabelle einfügen. Es scheint also etwas mit PHP/PDO zu tun zu haben? Aber ich bin einfach ratlos.
MySQL ist Percona 8.4 (insbesondere Version 8.4.7-7 für Linux auf x86_64 (Percona Server (GPL), Release '7', Revision '9a19f1fd'))
Dieser Code funktioniert auf meinem Laptop (Linux Mint 22.2), auf dem die gleichen Versionen von PHP/Apache2 ausgeführt werden, aber eine etwas ältere Version von Percona (Ver 8.4.6-6 für Linux auf x86_64 (Percona Server (GPL), Release '6', Revision '9927a2fb')). Apt besteht darauf, dass ich die neueste Version auf dem Laptop habe und es mir widerstrebt, Dinge zu erzwingen. Aber es scheint nicht, dass die Datenbank das Problem ist, da ich die Daten manuell auf dem Server einfügen kann. Ich habe die phpinfo von jedem System verglichen und es gibt wirklich keinen offensichtlichen Schuldigen (Laptop hat bzip2 und xdebug).
Irgendwelche Vorschläge, wo man sonst noch suchen könnte?
Wie gewünscht:
define( 'DB_CHARSET', 'utf8mb4' );
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET . (DB_COLLATE != '' ? ';collate=' . DB_COLLATE : '' );
$pdo = new PDO($dsn, DB_USER, DB_PASSWORD);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post