Los signos de interrogación provienen de esto:
- El cliente tiene un carácter válido (bueno) y
- Los
SET NAMESestá de acuerdo con la codificación que tiene el cliente (bien), pero - El
CHARACTER SETde la columna de destino no incluye el carácter deseado (malo).
Ejemplos:
latin1maneja solo caracteres de Europa Occidental; tratar de poner un carácter de Europa del Este o cualquier carácter asiático no encajará.latin2ycp1250puede manejar checo, por lo que las conversiones entre ellos son en su mayoría correctas, pero no entre ninguno de ellos ylatin1utf8mb4es 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
utf8mb4en la(s) columna(s) de la tabla probablemente funcione en todos los casos. - De lo contrario, elige algún
CHARACTER SETpara 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.