Alternativet character_set_client
är vad MySQL använder för teckenuppsättningen av frågor och data som klienten skickar.
Standard är utf8 i MySQL 5.5, 5.6 och 5.7, och utf8mb4 i 8.0.
Det kan också ändras globalt i din my.cnf-alternativfil, eller per session av en SETT NAMN uttalande.
Det är bra att ställa in alternativet uttryckligen när du ansluter, så att du inte behöver anta dess standardvärde.
Angående din kommentar:
Jag är rädd att du blandar ihop två olika fall av SQL-injektion. Det finns en risk när man använder dessa specifika fem teckenuppsättningar, men det är inte relaterat till andra ordningens SQL-injektion.
Teckenuppsättningsrisken beror på vissa teckenuppsättningar med flera byte. Det är vanligt att infoga ett snedstreck för att undvika ett bokstavligt citattecken. Men i vissa teckenuppsättningar slås omvänt snedstreckbyte samman med föregående byte och bildar ett flerbytetecken. Det lämnar citatet ofrånkomligt.
Andra ordningens SQL-injektion är helt annorlunda. Det kan förekomma med vilken teckenuppsättning som helst. Det är när en angripare lägger till data till din databas på legitima sätt, som att fylla i ett formulär. Infogning av data hanteras utan fel. Men värdena de infogar innehåller syntax som är utformad för att utnyttja en senare SQL-fråga.
Det förlitar sig på att utvecklare tror att data som redan har sparats säkert i deras databas på något sätt är "säker" för användning utan korrekt parametrering.
Ett exempel på andra ordningens SQL-injektion som bara är oavsiktlig istället för skadlig kan vara att en person har efternamnet "O'Reilly" och namnet läses av koden och används i en efterföljande fråga.
$name = $db->query("SELECT last_name FROM people WHERE id = 123")->fetchColumn();
$sql = "SELECT * FROM accounts WHERE account_owner_last_name = '$name'";
Om namnet innehåller en bokstavlig apostrof, skulle det förstöra den andra frågan i det exemplet.