sql >> Database >  >> Database Tools >> phpMyAdmin

MySQL voert westerse codering uit in UTF-8 PHP-bestand

Gebruik mysqli_set_charset om de clientcodering te wijzigen in UTF-8 net nadat u verbinding hebt gemaakt:

$mysqli->set_charset("utf8");

De clientcodering is waar MySql verwacht dat uw invoer zich in bevindt (bijvoorbeeld wanneer u door de gebruiker geleverde tekst invoegt in een zoekopdracht) en waarin het u de resultaten geeft (dus het moet overeenkomen met uw uitvoercodering om echo om dingen correct weer te geven).

U moet ervoor zorgen dat het overeenkomt met de codering van uw webpagina om rekening te houden met de twee bovenstaande scenario's en de codering van het PHP-bronbestand (zodat de hardgecodeerde delen van uw zoekopdrachten correct worden geïnterpreteerd).

Update:gegevens die zijn ingevoegd met latin-1 converteren naar utf-8

Met betrekking tot gegevens die al zijn ingevoegd met de verkeerde verbindingscodering, is er een handige oplossing om het probleem op te lossen. Voor elke kolom die dit soort gegevens bevat, moet u het volgende doen:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

De tijdelijke aanduidingen table_name , column_name en existing_column_type moet elke keer worden vervangen door de juiste waarden uit uw database.

Wat dit doet is

  1. Vertel MySql dat het gegevens in die kolom in latin1 moet opslaan. Deze tekenset bevat slechts een kleine subset van utf8, dus in het algemeen gaat deze conversie gepaard met gegevensverlies, maar in dit specifieke scenario werden de gegevens al geïnterpreteerd als latin1 bij invoer, dus er zijn geen bijwerkingen. MySql zal echter intern de byteweergave van uw gegevens converteren om overeen te komen met wat oorspronkelijk vanuit PHP is verzonden.
  2. Converteer de kolom naar een binair type (BLOB ) die geen bijbehorende coderingsinformatie heeft. Op dit punt zal de kolom onbewerkte bytes bevatten die een correcte utf8-tekenreeks zijn.
  3. Converteer de kolom naar het vorige tekentype en vertel MySql dat de onbewerkte bytes moeten worden beschouwd als utf8-codering.

WAARSCHUWING:u kunt deze willekeurige benadering alleen gebruiken als de betreffende kolom alleen bevat onjuist ingevoerde gegevens. Alle gegevens die correct zijn ingevoegd, worden afgekapt bij het eerste voorkomen van een niet-ASCII-teken!

Daarom is het een goed idee om het nu meteen te doen, voordat de PHP-side fix van kracht wordt.



  1. Hoe de laatste 10 rijen van een SQL-tabel SELECTEREN die geen ID-veld heeft?

  2. Hoe kan ik een sneltoets programmeren om de top 1000* uit de geselecteerde tabel te selecteren?

  3. Gebruik PHP om een ​​invoer-SQL-query op te maken als HTML?

  4. Hoe de waarden van een tabelvariabele te zien tijdens het debuggen in T-SQL?