MySQL-tegnkodningsproblem er, hvor din MySQL-database får UTF8-tegn (som å, ä og ö) til at blive vist forkert. Dette skyldes, at MySQL som standard bruger latin1 tegnsæt. Dette problem er blevet vigtigt på grund af webindholdets globale karakter i disse dage. Du kan løse det ved at indstille MySQL-tegnkodning til UTF8. Dette kan gøres på flere måder.
- Kør en forespørgsel "SET NAMES 'utf8'" i starten af hver forbindelse – dette vil tvinge MySQL til at bruge UTF8 i hele den forbindelses levetid. Dette er en god mulighed, hvis du ikke har adgang til filen my.cnf (linux/mac) / my.ini (windows).
- Find og rediger filen my.cnf (linux/mac) / my.ini (windows) på din databaseserver. Tilføj følgende linjer til mysqld afsnit :[mysqld] default-character-set=utf8 skip-character-set-client-handshake Hvis du nu genstarter MySQL-serveren, skal MySQL-tegnkodningen som standard være UTF8
- Hvad hvis du allerede har en database? Hvordan konverterer man dets indhold til UTF8? Du kan bruge følgende 3 forespørgsler. Erstat DATABASE_NAME, TABLE_NAME og FIELD_NAME med dine værdier. ændre tabel TABLE_NAME ændre FIELD_NAME-blob; ændre database DATABASE_NAME charset=utf8; ændre tabel TABLE_NAME rediger FIELD_NAME varchar(255) tegnsæt utf8; Konverter feltet til BLOB, det er en binær felttype. Så ændrer vi databasens tegnsæt til utf8. Til sidst konverterer vi vores felt tilbage til tekst eller varchar.
Du kan kontrollere din MySQL-tegnkodning med følgende forespørgsel.
Standard MySQL-tegnkodning
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | latin1 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
Påkrævet MySQL-tegnkodning
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
Du skal også sikre, at din programmeringsramme som Django, Code Igniter osv. bruger UTF8-kodning.