Los signos de interrogación provienen de esto:
- El cliente tiene un carácter válido (bueno) y
- Los
SET NAMES
está de acuerdo con la codificación que tiene el cliente (bien), pero - El
CHARACTER SET
de la columna de destino no incluye el carácter deseado (malo).
Ejemplos:
latin1
maneja solo caracteres de Europa Occidental; tratar de poner un carácter de Europa del Este o cualquier carácter asiático no encajará.latin2
ycp1250
puede manejar checo, por lo que las conversiones entre ellos son en su mayoría correctas, pero no entre ninguno de ellos ylatin1
utf8mb4
es un superconjunto deutf8
.Poner un carácter utf8 en utf8mb4 está bien, pero al revés dará como resultado un '?' en algunos casos.
Los caracteres que se convirtieron en '?' no se puede recuperar de la mesa.
Cómo arreglar futuros INSERTs
?
- Uso de
utf8mb4
en la(s) columna(s) de la tabla probablemente funcione en todos los casos. - De lo contrario, elige algún
CHARACTER SET
para las columnas de la tabla que coincidan razonablemente con los datos del cliente.
¿La razón por la que solo algunos de los caracteres son ?
(en š?ž??
) es porque šž
existen en latín1 pero los demás no.
En pocas palabras:cambia el CHARACTER SET
en la definición de la tabla.