I punti interrogativi derivano da questo:
- Il cliente ha un carattere valido (buono) e
- Il
SET NAMES
concorda con la codifica che ha il client (buono), ma - Il
CHARACTER SET
della colonna di destinazione non include il carattere previsto (cattivo).
Esempi:
latin1
gestisce solo i caratteri dell'Europa occidentale; il tentativo di inserire un carattere dell'Europa orientale o qualsiasi altro carattere asiatico non si adatta.latin2
ecp1250
può gestire il ceco, quindi le conversioni tra di loro sono per lo più OK, ma non tra nessuno dei due elatin1
utf8mb4
è un superset diutf8
.Inserire un carattere utf8 in utf8mb4 va bene, ma il contrario risulterà in un '?' in alcuni casi.
I caratteri che sono stati convertiti in '?' non può essere recuperato dalla tabella.
Come correggere i futuri INSERTs
?
- Utilizzo di
utf8mb4
sulle colonne della tabella probabilmente funziona in tutti i casi. - Altrimenti, scegli un
CHARACTER SET
per le colonne della tabella che corrispondono ragionevolmente ai dati del cliente.
Il motivo per cui solo alcuni dei caratteri sono ?
(in š?ž??
) è perché šž
esistono in latino1 ma gli altri no.
In conclusione:cambia il CHARACTER SET
nella definizione della tabella.