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

Kan ikke korrekt indsætte græske tegn i mysql-databasen

Dit problem er relateret til din tegnsæt-kodning. Det er vigtigt, at din hele kode har det samme tegnsæt for at undgå problemer, hvor tegn vises forkert.

Der er en del indstillinger, der skal defineres ordentligt, og jeg vil stærkt anbefale UTF-8, da dette har de fleste bogstaver, du har brug for (skandinavisk, græsk, arabisk, russisk osv.).

Her er en lille liste over ting, der skal indstilles til et specifikt tegnsæt.

Overskrifter

  • Indstilling af tegnsættet i både HTML- og PHP-headere til UTF-8

    • PHP:

      header('Content-Type: text/html; charset=utf-8');
      

      (PHP-headere skal placeres før enhver output (ekko, mellemrum, HTML)!)

    • HTML:

      <meta charset=utf-8" />
      

      (HTML-headere er placeret i <head> / </head> tag)

Forbindelse

  • Du skal også angive tegnsættet i selve forbindelsen . For dit PDO-eksempel er det gjort sådan her

    $handler = new PDO('mysql:host=localhost;dbname=database;charset=utf8', 'username', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8"));
    

    Bemærk charset=utf8 -attribut. Andre MySQL-API'er har forskellige måder at gøre dette på, hvis du skulle bruge noget andet i fremtiden.

Database

  • Din database og dens tabeller skal indstilles til UTF-8. Bemærk, at tegnsæt ikke er det samme som sammenstilling. Jeg kan se, at du allerede har indstillet din sortering til UTF-8, så det er godt, men gør det samme for hele databasen og alle tabeller.

    Du kan gøre det ved at køre nedenstående forespørgsler én gang for hver database og tabeller (for eksempel i phpMyAdmin)

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    Bemærk, at data, der allerede er gemt i databasen, ikke automatisk vil have deres ødelagte tegnsæt rettet. Så det er vigtigt, at du gør dette, før du indsætter data, eller at du genindsætter det efter indstilling af tegnsættet.

php.ini-specifikation

  • I din php.ini fil, skal du angive standardtegnsættet for din platform, som denne

    default_charset = "utf-8";
    

Filkodning

  • Det er også vigtigt, at .php selve filen er UTF-8-kodet. Hvis du bruger Notepad++ til at skrive din kode, kan dette gøres i rullemenuen "Format" på proceslinjen.

Emojis

  • I MySQL (både i tabellen, databasen og forbindelsesobjektet), skal du angive utf8mb4 tegnsæt i modsætning til almindelig utf8 , hvis du ønsker at arbejde med emojis.

Jeg ved ikke meget om Java, men hvis du også kan indstille attributter til UTF-8 der, så gør det. I bund og grund skal alt, der kan indstilles til et specifikt tegnsæt, indstilles til det samme.

Hvis du følger alle ovenstående tips, er chancerne for, at dit problem vil blive løst. Hvis ikke, kan du tage et kig på dette StackOverflow-indlæg: UTF-8 hele vejen igennem .



  1. Materialiseret visning i mysql

  2. Hvordan kan jeg gå gennem et MySQL-resultatsæt mere end én gang ved hjælp af mysql_*-funktionerne?

  3. Eksport af en tabel fra Amazon RDS til en CSV-fil

  4. Hvordan tilføjer jeg indekser til MySQL-tabeller?