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

Flusso di lavoro UTF8 PHP, riassunto MySQL

  • mb_internal_encoding('UTF-8') non fa nulla da solo, imposta solo il parametro di codifica predefinito per ogni mb_ funzione. Se non stai utilizzando alcun mb_ funzione, non fa alcuna differenza. Se lo sei, ha senso impostarlo in modo da non dover passare il $encoding parametro ogni volta individualmente.
  • IMO mb_detect_encoding è per lo più inutile poiché è fondamentalmente impossibile rilevare con precisione la codifica di testo sconosciuto. Dovresti sapere in quale codifica si trova un blob di testo perché hai una specifica al riguardo, oppure devi analizzare i metadati appropriati come le intestazioni o i meta tag in cui è specificata la codifica.
  • Utilizzo di mb_check_encoding per verificare se un blob di testo è valido nella codifica in cui ti aspetti che si trovi è in genere sufficiente. In caso contrario, scartalo e genera un errore appropriato.
  • Riguardo a:

    Se stai manipolando stringhe che contengono caratteri multibyte, allora sì, devi usare il mb_ funzioni per evitare di ottenere risultati errati. Le funzioni di base delle stringhe funzionano solo a livello di byte, non a livello di carattere, che è ciò che in genere si desidera quando si lavora con le stringhe.

  • utf8_general_ci rispetto a utf8_bin fa la differenza solo quando fascicola , ovvero l'ordinamento e il confronto delle stringhe. Con utf8_bin i dati vengono trattati in forma binaria, ovvero solo i dati identici sono identici. Con utf8_general_ci viene applicata una certa logica, ad es. "é" ordina insieme a "e" e le maiuscole sono considerate uguali alle minuscole.