sql >> Database >  >> RDS >> Mysql

Speciale tekens in PHP / MySQL

Ik zou graag wat meer details willen geven over de oplossing voorgesteld door vartec wat (afhankelijk van uw MySQL-installatie) de meest correcte oplossing voor uw probleem is. Allereerst is het probleem met de tekenset / codering in MySQL een enigszins complex onderwerp dat uitgebreid wordt behandeld in de MySQL-handleiding Hoofdstuk 9.1 "Ondersteuning voor tekensets" . In jouw geval vooral 9.1.4. "Verbindingstekensets en -sorteringen" zal het meest relevant zijn.

Om het kort te maken:MySQL moet weten welke tekenset / codering uw clienttoepassing (sprekend vanuit het databaseperspectief dat uw PHP-script is) verwacht, aangezien het alle tekenreeksgegevens transcodeert van de interne tekenset / codering die is gedefinieerd op server-, database-, tabel- of kolomniveau in de verbindingstekenset / codering. U gebruikt UTF-8 aan de clientzijde, dus u moet MySQL vertellen dat u UTF-8 gebruikt. Dit wordt gedaan door het MySQL-commando SET NAMES 'utf8' die moet worden verzonden als de eerste vraag bij het openen van een verbinding. Afhankelijk van uw installatie en van de MySQL-clientbibliotheek die u in het PHP-script gebruikt, kan dit automatisch bij elke verbinding worden gedaan.

Als je PDO gebruikt, is het gewoon een kwestie van een configuratieparameter instellen

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Het gebruik van mysqli om de tekenset / codering van de client te wijzigen is nog eenvoudiger:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Ik hoop dat dit zal helpen om het geheel begrijpelijker te maken.



  1. Installeer meerdere MySQL-instanties op een Linux-server -gebruik een apart MySQL-configuratiebestand

  2. FNDCPASS &AFPASSWD

  3. De EXECUTE-toestemming is geweigerd voor het object 'xxxxxxx', database 'zzzzzzz', schema 'dbo'

  4. CROSS JOIN vs INNER JOIN in SQL