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

come memorizzare i segni di accento sui caratteri nel mio database

UTF-8 è (generalmente) una codifica "sicura" per qualsiasi set di caratteri nel mondo. (Non sempre il più efficiente, e ci sono alcune argomentazioni da sostenere che Unicode sottorappresenti gli script CJK con il suo modello "han unificato", ma andando avanti...)

Tuttavia, è probabile che i tuoi programmi di interfaccia non stiano traducendo correttamente in/da UTF-8. Ad esempio, ó => ó sembra che i dati UTF-8 (in cui un carattere può essere distribuito su un numero variabile di byte) ti vengano presentati utilizzando una codifica europea a byte singolo, come ISO-8859-15 o MS- CP-1451 o simile.

Sei probabilmente memorizzare i dati correttamente, ma caricare in modo errato. Se stai solo usando mysql programma terminale o simile, assicurati che il tuo terminale sia impostato per utilizzare UTF-8 (su un sistema Unix/Linux, locale probabilmente dovrebbe essere qualcosa che termina con .utf8 , per esempio. il mio ha LANG=en_US.utf8 )

Se stai estraendo dati utilizzando uno strumento GUI o simile, controlla il suo pannello Impostazioni/Preferenze per il set di caratteri.

Se stai recuperando i caratteri tradotti in modo errato in un'applicazione che hai scritto, guarda gli strumenti della tua lingua per impostare le impostazioni locali. (Forse, il INSERT le routine hanno ragione, ma il SELECT routine hai sbagliato?)

E, se questo viene inviato al Web, assicurati che i tuoi file (XML|HTML|XHTML) abbiano charset=utf8 dichiarato nel luogo o nei luoghi appropriati, o riconduci da UTF-8 al set di caratteri del tuo documento (se possibile) usando qualcosa come iconv durante l'inserimento di testo dal database. (La maggior parte dei set di caratteri non Unicode può rappresentare solo un sottoinsieme di Unicode, ovviamente; ad esempio il set ISO-8859-15 fa un lavoro decente nel coprire le lingue europee, ma non supporta i sistemi di scrittura in cirillico, arabo o CJK, quindi è possibile non riuscire a tradurre un carattere.) In Perl, puoi usare gli argomenti pass per open oppure usa binmode per impostare un livello di traduzione del set di caratteri trasparente su un flusso "filehandle".