sql >> Database >  >> RDS >> Mysql

Utf8mb4 gebruiken met php en mysql

MySQL's utf8 codering is niet echte UTF-8. Het is een codering die een beetje op UTF-8 lijkt, maar alleen een subset ondersteunt van wat UTF-8 ondersteunt. utf8mb4 is werkelijk UTF-8. Dit verschil is een intern implementatiedetail van MySQL. Beide zien eruit als UTF-8 aan de PHP-kant. Of je nu utf8 . gebruikt of utf8mb4 , PHP krijgt in beide gevallen geldige UTF-8.

Wat u moet controleren, is dat de verbindingscodering tussen PHP en MySQL is ingesteld op utf8mb4 . Als het is ingesteld op utf8 , MySQL ondersteunt niet alle tekens. U stelt deze verbindingscodering in met mysql_set_charset() , de BOB charset DSN-verbindingsparameter of welke andere methode dan ook die geschikt is voor uw database-API naar keuze.

mb_internal_encoding stelt gewoon de standaardwaarde in voor de $encoding parameter alle mb_* functies hebben. Het heeft niets te maken met MySQL.

UTF-8 en UTF-32 verschillen in de manier waarop ze tekens coderen. UTF-8 gebruikt een minimum van 1 byte voor een teken en maximaal 4. UTF-32 altijd gebruikt 4 bytes voor elk teken. UTF-16 gebruikt minimaal 2 bytes en maximaal 4.
Vanwege de variabele lengte heeft UTF-8 een beetje overhead. Een teken dat in UTF-16 in 2 bytes kan worden gecodeerd, kan in UTF-8 3 of 4 hebben; aan de andere kant gebruikt UTF-16 nooit minder dan 2 bytes. Als u veel Aziatische tekst opslaat, gebruikt UTF-16 mogelijk minder opslagruimte. Als de meeste van uw tekst Engels/ASCII is, gebruikt UTF-8 minder opslagruimte. UTF-32 gebruikt altijd de meeste opslagruimte.



  1. Jenkins gebruiken met Kubernetes AWS, deel 3

  2. B-Tree versus hash-tabel

  3. MySqlDb gooit Operand moet 1 kolom(men) bevatten bij insert negeer statement

  4. Hoe sql-query te lezen naar panda's dataframe / python / django