sql >> Databasteknik >  >> RDS >> Mysql

Hur löser man MySQL-teckenkodningsproblem?

MySQL-teckenkodningsproblem är när din MySQL-databas gör att UTF8-tecken (som å, ä och ö) visas felaktigt. Detta beror på att MySQL som standard använder latin1 teckenuppsättning. Detta problem har blivit viktigt på grund av webbinnehållets globala karaktär i dessa dagar. Du kan lösa det genom att ställa in MySQL-teckenkodning till UTF8. Detta kan göras på flera sätt.

  1. Kör en fråga "SET NAMES 'utf8'" i början av varje anslutning – detta kommer att tvinga MySQL att använda UTF8 under anslutningens livstid. Det här är ett bra alternativ om du inte har tillgång till filen my.cnf (linux/mac) / my.ini (windows).
  2. Hitta och redigera filen my.cnf (linux/mac) / my.ini (windows) på din databasserver. Lägg till följande rader i mysqld avsnitt :[mysqld] default-character-set=utf8 skip-character-set-client-handshake Om du nu startar om MySQL-servern bör MySQL-teckenkodningen som standard vara UTF8
  3. Vad händer om du redan har en databas? Hur konverterar man innehållet till UTF8? Du kan använda följande 3 frågor. Ersätt DATABASE_NAME, TABLE_NAME och FIELD_NAME med dina värden. ändra tabell TABLE_NAME ändra FIELD_NAME blob; ändra databasen DATABASE_NAME charset=utf8; ändra tabell TABLE_NAME ändra FIELD_NAME varchar(255) teckenuppsättning utf8; Konvertera fältet till BLOB, det är en binär fälttyp. Sedan ändrar vi teckenuppsättningen i databasen till utf8. Slutligen konverterar vi vårt fält tillbaka till text eller varchar.

Du kan kontrollera din MySQL-teckenkodning med följande fråga.

Standard MySQL-teckenkodning

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)

Krävs MySQL-teckenkodning

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 måste också se till att ditt programmeringsramverk som Django, Code Igniter, etc använder UTF8-kodning.

  1. MySQL Cross Server Select Query

  2. Infoga data och ställ in främmande nycklar med Postgres

  3. Prag PostgreSQL Meetup

  4. Ersätter NULL med 0 i en SQL-serverfråga