sql >> Database >  >> RDS >> Mysql

Kan Griekse tekens niet correct invoegen in de mysql-database

Uw probleem heeft te maken met uw charset-codering. Het is belangrijk dat uw gehele code heeft dezelfde tekenset om problemen te voorkomen waarbij tekens onjuist worden weergegeven.

Er zijn nogal wat instellingen die goed moeten worden gedefinieerd en ik zou UTF-8 ten zeerste aanbevelen, omdat dit de meeste letters heeft die je nodig hebt (Scandinavisch, Grieks, Arabisch, Russisch, enz.).

Hier is een kleine lijst met dingen die moeten worden ingesteld op een specifieke tekenset.

Kopteksten

  • De tekenset in zowel HTML- als PHP-headers instellen op UTF-8

    • PHP:

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

      (PHP-headers moeten vóór elke worden geplaatst uitvoer (echo, witruimte, HTML)!)

    • HTML:

      <meta charset=utf-8" />
      

      (HTML-headers worden geplaatst in de <head> / </head> tag)

Verbinding

  • Je moet ook de tekenset specificeren in de verbinding zelf . Voor uw BOB-voorbeeld is het zo gedaan

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

    Let op de charset=utf8 -attribuut. Andere MySQL-API's hebben verschillende manieren om dit te doen, mocht u in de toekomst iets anders gebruiken.

Database

  • Uw database en de tabellen moeten worden ingesteld op UTF-8. Merk op dat tekenset niet . is hetzelfde als sorteren. Ik zie dat je je sortering al hebt ingesteld op UTF-8, dus dat is goed, maar doe hetzelfde voor de hele database en alle tabellen.

    U kunt dat doen door de onderstaande query's één keer uit te voeren voor elke database en tabellen (bijvoorbeeld in phpMyAdmin)

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

    Houd er rekening mee dat van alle gegevens die al in de database zijn opgeslagen, de kapotte tekenset niet automatisch wordt gerepareerd. Het is dus belangrijk dat u dit doet voordat u gegevens invoert, of dat u deze opnieuw invoert nadat u de tekenset hebt ingesteld.

php.ini-specificatie

  • In uw php.ini bestand, moet u de standaardtekenset voor uw platform specificeren, zoals deze

    default_charset = "utf-8";
    

Bestandscodering

  • Het is ook belangrijk dat de .php bestand zelf is UTF-8-gecodeerd. Als u Notepad++ gebruikt om uw code te schrijven, kunt u dit doen in de vervolgkeuzelijst "Formaat" op de taakbalk.

Emoji's

  • In MySQL (zowel in de tabel, database als verbindingsobject), moet u de utf8mb4 opgeven charset, in tegenstelling tot gewone utf8 , als je met emoji's wilt werken.

Ik weet niet veel over Java, maar als je daar ook attributen voor UTF-8 kunt instellen, doe het dan. In wezen moet alles dat op een specifieke tekenset kan worden ingesteld, op hetzelfde worden ingesteld.

Als u alle bovenstaande aanwijzingen opvolgt, is de kans groot dat uw probleem wordt opgelost. Zo niet, dan kun je dit StackOverflow-bericht bekijken: UTF-8 helemaal door .



  1. SQL, lege cellen afhandelen

  2. Selecteer / voeg een versie van een Upsert in:is er een ontwerppatroon voor hoge gelijktijdigheid?

  3. MySql.Data.MySqlClient.Replication.ReplicationManager genereert een System.TypeInitializationException

  4. Hoe schakel ik autocommit uit voor een MySQL-client?