sql >> Databasteknik >  >> RDS >> Mysql

hur hanterar man accenter och konstiga tecken i en databas?

Sortering påverkar endast textsortering, det har ingen effekt på den faktiska teckenuppsättningen av lagrad data.

Jag skulle rekommendera denna konfiguration:

  1. Ställ in teckenuppsättningen för hela DB bara, så du behöver inte ställa in det för varje bord separat. Teckenuppsättning ärvs från DB till tabeller till kolumner. Använd utf8 som teckenuppsättning.

  2. Ange teckenuppsättningen för DB-anslutningen . Kör dessa frågor efter att du anslutit till databasen:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Ange teckenuppsättningen för sidan , med hjälp av HTTP-huvud och/eller HTML-metatagg. En av dessa räcker. Använd utf-8 som charset .

Det borde räcka.

Om du vill ha korrekt sortering av spanska strängar, ställ in sortering för hela databasen. utf8_spanish_ci borde fungera (ci betyder skiftlägesokänslig ). Utan korrekt sortering skulle spanska tecken med accent sorteras alltid sist.

Obs :det är möjligt att teckenuppsättningen av data du redan har i en tabell är trasig, eftersom din teckenuppsättningskonfiguration var felaktig tidigare. Du bör kontrollera det med någon DB-klient först för att utesluta det här fallet. Om den är trasig, sätt bara in din data igen med rätt teckenuppsättningskonfiguration.

Hur gör teckenuppsättning arbeta i en databas

  • objekt har en teckenuppsättning attribut, som kan ställas in explicit eller ärvs (server> databas> tabell> kolumn), så det bästa alternativet är att ställa in det för hela databasen

  • klientanslutning har också en teckenuppsättning attribut och det talar om för databasen i vilken kodning du skickar data

Om klientanslutningens och målobjektets teckenuppsättningar är olika, konverteras data som du skickar till databasen automatiskt från anslutningens teckenuppsättning till objektets teckenuppsättning.

Så om du till exempel har data i utf8 , men klientanslutning inställd på latin1 , kommer databasen att bryta data, eftersom den kommer att försöka konvertera utf8 som om det är latin1 .



  1. Är det möjligt att använda användardefinierade aggregat (clr) med fönsterfunktioner (över)?

  2. Beräkna öppettider mellan två datum

  3. 10 skäl att hålla fast vid MySQL

  4. MySQL; Bästa datatypen för stora antal