sql >> Database >  >> RDS >> Mysql

hoe om te gaan met accenten en vreemde tekens in een database?

Collatie is alleen van invloed op het sorteren van tekst, het heeft geen effect op de werkelijke tekenset van opgeslagen gegevens.

Ik zou deze configuratie aanbevelen:

  1. Stel de tekenset voor de hele DB in alleen, zodat u deze niet voor elke tafel afzonderlijk hoeft in te stellen. Tekenset wordt overgenomen van DB naar tabellen naar kolommen. Gebruik utf8 als de tekenset.

  2. Stel de tekenset voor de DB-verbinding in . Voer deze query's uit nadat u verbinding heeft gemaakt met de database:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Stel de tekenset voor de pagina in , met behulp van HTTP-header en/of HTML-metatag. Een van deze is genoeg. Gebruik utf-8 als de charset .

Dit zou genoeg moeten zijn.

Als u de juiste sortering van Spaanse tekenreeksen wilt hebben, stelt u sortering in voor de hele database. utf8_spanish_ci zou moeten werken (ci betekent Hoofdlettergevoelig ). Zonder de juiste sortering zouden Spaanse tekens met accenten altijd als laatste worden gesorteerd.

Opmerking :het is mogelijk dat de tekenset van gegevens die u al in een tabel hebt, is verbroken, omdat uw tekensetconfiguratie eerder verkeerd was. U moet het eerst controleren met een DB-client om dit geval uit te sluiten. Als het defect is, voert u uw gegevens opnieuw in met de juiste tekensetconfiguratie.

Hoe tekenset werk in een database

  • objecten heb een tekenset attribuut, dat expliciet kan worden ingesteld of wordt overgenomen (server> database> tabel> kolom), dus de beste optie is om het voor de hele database in te stellen

  • clientverbinding heeft ook een tekenset attribuut en het vertelt de database in welke codering u de gegevens verzendt

Als de tekensets van de clientverbinding en het doelobject verschillen, worden de gegevens die u naar de database verzendt automatisch geconverteerd van de tekenset van de verbinding naar de tekenset van het object.

Dus als je bijvoorbeeld de gegevens in utf8 . hebt , maar klantverbinding ingesteld op latin1 , zal de database de gegevens breken, omdat het zal proberen om utf8 . te converteren alsof het latin1 . is .



  1. Hoe bepaal ik de maximale transactiegrootte in MySQL?

  2. Is het mogelijk om parameters voor de tabel- of kolomnaam op te geven in Prepared Statements of QueryRunner.update()?

  3. SQL NIET IN werkt niet

  4. Negeert MySQL null-waarden op unieke beperkingen?