Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można poprawnie wstawić greckich znaków w bazie mysql

Twój problem jest związany z kodowaniem zestawu znaków. Ważne jest, aby Twój cały kod ma ten sam zestaw znaków, aby uniknąć problemów z nieprawidłowym wyświetlaniem znaków.

Jest sporo ustawień, które należy odpowiednio zdefiniować i zdecydowanie polecam UTF-8, ponieważ zawiera większość potrzebnych liter (skandynawskie, greckie, arabskie, rosyjskie itp.).

Oto mała lista rzeczy, które należy ustawić na określony zestaw znaków.

Nagłówki

  • Ustawienie zestawu znaków w nagłówkach HTML i PHP na UTF-8

    • PHP:

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

      (Nagłówki PHP muszą być umieszczone przed dowolnym wyjście (echo, białe znaki, HTML)!)

    • HTML:

      <meta charset=utf-8" />
      

      (Nagłówki HTML są umieszczane w <head> / </head> tag)

Połączenie

  • Musisz także określić zestaw znaków w samym połączeniu . Dla przykładu PDO jest to zrobione w ten sposób

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

    Zwróć uwagę na charset=utf8 -atrybut. Inne interfejsy MySQL-API mają różne sposoby na zrobienie tego, jeśli w przyszłości użyjesz czegoś innego.

Baza danych

  • Twoja baza danych a jego tabele muszą być ustawione na UTF-8. Pamiętaj, że zestaw znaków nie tak samo jak sortowanie. Widzę, że już ustawiłeś sortowanie na UTF-8, więc to dobrze, ale zrób to samo dla całej bazy danych i wszystkich tabel.

    Możesz to zrobić, uruchamiając poniższe zapytania raz dla każdej bazy danych i tabel (na przykład w phpMyAdmin)

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

    Zwróć uwagę, że żadne dane już zapisane w bazie danych nie będą miały automatycznie naprawianego uszkodzonego zestawu znaków. Dlatego ważne jest, abyś zrobił to przed wstawieniem danych lub wstawił je ponownie po ustawieniu zestawu znaków.

Specyfikacja php.ini

  • W twoim php.ini pliku, powinieneś określić domyślny zestaw znaków dla swojej platformy, tak jak ten

    default_charset = "utf-8";
    

Kodowanie plików

  • Ważne jest również, aby plik .php sam plik jest zakodowany w UTF-8. Jeśli używasz Notepad ++ do pisania kodu, możesz to zrobić w menu rozwijanym „Format” na pasku zadań.

Emoji

  • W MySQL (zarówno w tabeli, bazie danych, jak i obiekcie połączenia) będziesz musiał określić utf8mb4 charset, w przeciwieństwie do zwykłego utf8 , jeśli chcesz pracować z emotikonami.

Nie wiem zbyt wiele o Javie, ale jeśli możesz ustawić atrybuty na UTF-8, zrób to. Zasadniczo wszystko, co można ustawić na konkretny zestaw znaków, powinno być ustawione tak samo.

Jeśli zastosujesz się do wszystkich powyższych wskazówek, prawdopodobnie Twój problem zostanie rozwiązany. Jeśli nie, możesz rzucić okiem na ten post StackOverflow: UTF-8 przez całą drogę .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP:Dynamiczne rozwijane z optgroup

  2. Jak obliczyć średnią dzienną sprzedaż w MySQL?

  3. Jak poradzić sobie z błędem klucza obcego MySQL w PHP?

  4. MySQL:NIE PODOBNE

  5. PHP:wywoływanie procedury składowanej MySQL z parametrami INPUT i OUTPUT (NOT INOUT)