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

come gestire accenti e strani caratteri in un database?

Fascicolazione influisce solo sull'ordinamento del testo, non ha alcun effetto sul set di caratteri effettivo dei dati memorizzati.

Consiglierei questa configurazione:

  1. Imposta il set di caratteri per l'intero DB solo, quindi non è necessario impostarlo separatamente per ogni tabella. Il set di caratteri viene ereditato dal DB dalle tabelle alle colonne. Usa utf8 come set di caratteri.

  2. Imposta il set di caratteri per la connessione DB . Esegui queste query dopo esserti connesso al database:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Imposta il set di caratteri per la pagina , utilizzando l'intestazione HTTP e/o il meta tag HTML. Uno di questi è sufficiente. Usa utf-8 come charset .

Questo dovrebbe bastare.

Se vuoi avere un ordinamento corretto delle stringhe spagnole, imposta collation per l'intero database. utf8_spanish_ci dovrebbe funzionare (ci significa Maiuscole/minuscole ). Senza una corretta fascicolazione, i caratteri spagnoli accentati verrebbero ordinati sempre per ultimi.

Nota :è possibile che il set di caratteri dei dati che hai già in una tabella sia rotto, perché la configurazione del set di caratteri era errata in precedenza. Dovresti prima verificarlo utilizzando un client DB per escludere questo caso. Se è rotto, reinserisci i tuoi dati con la corretta configurazione del set di caratteri.

Come funziona il set di caratteri lavorare in un database

  • oggetti avere un set di caratteri attributo, che può essere impostato in modo esplicito o ereditato (server> database> tabella> colonna), quindi l'opzione migliore è impostarlo per l'intero database

  • connessione client ha anche un set di caratteri attributo e sta dicendo al database in quale codifica stai inviando i dati

Se i set di caratteri della connessione client e dell'oggetto di destinazione sono diversi, i dati che stai inviando al database vengono automaticamente convertiti dal set di caratteri della connessione al set di caratteri dell'oggetto.

Quindi, se hai ad esempio i dati in utf8 , ma connessione client impostato su latin1 , il database interromperà i dati, perché proverà a convertire utf8 come se fosse latin1 .