Mysql
 sql >> Database >  >> RDS >> Mysql

Caratteri non inglesi memorizzati, ottenuto '?????' - Problema relativo al set di caratteri MySQL

Cattive notizie. Ma prima, ricontrolla:

SELECT col, HEX(col)...

per vedere cosa c'è nella tabella. Se l'esagono mostra 3F , quindi i dati sono spariti. Memorizzato correttamente, il dal il carattere dovrebbe essere D8AF esadecimale; hah è D8AD esadecimale .

Che cosa è successo:

  • avevi dati con codifica utf8 (buono)
  • SET NAMES latin1 era in vigore (predefinito, ma errato)
  • la colonna è stata dichiarata CHARACTER SET latin1 (predefinito, ma sbagliato)

Come hai INSERTed i dati sono stati convertiti in latin1, che non ha valori per i caratteri farsi, quindi i punti interrogativi li hanno sostituiti.

La cura (per futuri `INSERT):

  • Ricodifica la tua applicazione utilizzando l'interfaccia mysqli_* invece dell'interfaccia mysql_* deprecata.
  • Dati con codifica utf8 (buono)
  • mysqli_set_charset('utf8')
  • controlla che le colonne e/o le tabelle predefinite siano CHARACTER SET utf8
  • Se stai visualizzando su una pagina web, <meta...utf8> dovrebbe essere vicino alla cima.

La discussione sopra riguarda CHARACTER SET , la codifica dei caratteri. Ora per un consiglio su COLLATION , utilizzato per confrontare e ordinare.

Se vuoi che questi siano trattati allo stesso modo:'بِسْمِ' ='بسم', usa utf8_unicode_ci (invece di utf8_general_ci) per COLLATION .