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

Impossibile inserire correttamente caratteri greci nel database MySQL

Il tuo problema è correlato alla codifica del set di caratteri. È importante che il tuo intero il codice ha lo stesso set di caratteri per evitare problemi in cui i caratteri vengono visualizzati in modo errato.

Ci sono alcune impostazioni che devono essere definite correttamente e consiglio vivamente UTF-8, poiché contiene la maggior parte delle lettere di cui avresti bisogno (scandinavo, greco, arabo, russo, ecc.).

Ecco un piccolo elenco di cose che devono essere impostate su un set di caratteri specifico.

Intestazioni

  • Impostazione del set di caratteri nelle intestazioni HTML e PHP su UTF-8

    • PHP:

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

      (Le intestazioni PHP devono essere posizionate prima di qualsiasi output (eco, spazi bianchi, HTML)!)

    • HTML:

      <meta charset=utf-8" />
      

      (Gli header HTML sono inseriti all'interno di <head> / </head> tag)

Connessione

  • Devi anche specificare il set di caratteri nella connessione stessa . Per il tuo esempio PDO, è fatto in questo modo

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

    Nota il charset=utf8 -attributo. Altre API MySQL hanno modi diversi per farlo se dovessi usare qualcos'altro in futuro.

Banca dati

  • Il tuo database e le sue tabelle devono essere impostate su UTF-8. Nota che il set di caratteri non lo stesso della raccolta. Vedo che hai già impostato le regole di confronto su UTF-8, quindi va bene, ma fai lo stesso per l'intero database e tutte le tabelle.

    Puoi farlo eseguendo le query seguenti una volta per ogni database e tabella (ad esempio in phpMyAdmin)

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

    Si noti che tutti i dati già archiviati nel database non avranno automaticamente il set di caratteri rotto riparato. Quindi è importante farlo prima di inserire i dati o reinserirli dopo aver impostato il set di caratteri.

Specifica php.ini

  • Nel tuo php.ini file, dovresti specificare il set di caratteri predefinito per la tua piattaforma, come questo

    default_charset = "utf-8";
    

Codifica dei file

  • È anche importante che il .php il file stesso è codificato in UTF-8. Se stai usando Notepad++ per scrivere il tuo codice, puoi farlo nel menu a discesa "Formato" sulla barra delle applicazioni.

Emoji

  • In MySQL (sia nella tabella che nel database e nell'oggetto connessione), dovrai specificare utf8mb4 charset, al contrario del normale utf8 , se desideri lavorare con gli emoji.

Non so molto di Java, ma se puoi anche impostare gli attributi su UTF-8, fallo. In sostanza, tutto ciò che può essere impostato su un set di caratteri specifico dovrebbe essere impostato sullo stesso.

Se segui tutti i suggerimenti sopra, è probabile che il tuo problema venga risolto. In caso contrario, puoi dare un'occhiata a questo post di StackOverflow: UTF-8 fino in fondo .