Thread Verfasser: Rolly8-HL
Thread ID: 1393
Thread Info
Es gibt 5 Beiträge zu diesem Thema, und es wurde 735 Mal angesehen.
 Thema drucken
Festlegen des Zeichensatzes
Rolly8-HL
Ich möchte nicht Unhöflich erscheinen und meinen Horizon nur dann vernünftig erweitern kann wie die Antworten es auch hergeben.
Zitat: Noch ein Tipp:
Falls du das Festlegen des Zeichensatzes der Datenbank genauso eingebaut hast wie bei deinem v7 Projekt, würde ich es so umstellen, dass dieser Befehl nur bei erfolgreicher Verbindung zur Datenbank ausgeführt wird. Bei deiner v7 Variante war das nämlich so eingebaut, dass der Befehl immer gesendet wird.
Erscheint also ein Fehler beim Herstellen der DB-Verbindung, wird gleich danach der nächste Fehler produziert. Bei einer nicht existierenden Verbindung zur Datenbank führt das Festlegen des zu verwendenden Zeichensatzes für die DB zwangsläufig zu einer Fehlermeldung.

Was genau ist jetzt damit gemeint und vor allem um welche Version der V7 geht es hier?
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Systemweb
Es gab hier im Forum mal einen Beitrag von dir, bei dem du in die maincore.php eine Zeile eingefügt hattest. Direkt nach
$link = dbconnect($db_host, $db_user, $db_pass, $db_name);
hattest du seinerzeit hinzugefügt:
dbquery("SET NAMES 'utf8mb4_unicode_ci'");
Bei welchem deiner Projekte das nun überall verbaut wurde kann ich dir natürlich nicht sagen.

Habe aber gerade nochmal nachgeschaut. Da ja bei einem Fehler in der Datenbankverbindung die Scriptausführung sofort mittels "die()" Funktion gestoppt wird ist das folgende Setzen des Zeichensatzes egal. Es wäre zwar vom Coder her gesehen klarer nachvollziehbar und übersichtlicher, aber trotzdem vollkommen in Ordnung diese Zeile ohne enstpr. Bedingung einzubauen. Falls keine DB-Verbindung besteht wird bereits vor dem Erreichen dieser Zeile abgebrochen.

Bei mir ist das so gelöst.
Für MySQLi:

Code 

// Check connection
   if ($db_connect->connect_error) {
      die("Unable to establish connection to MySQL
      ".$db_connect->connect_error);
   }
   else {
      mysqli_set_charset($db_connect, 'utf8mb4');
      dbquery("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
   }

und für PDO:

Code 

$pdo = dbconnection(new PDO("mysql:host=".$db_host.";dbname=".$db_name.";charset=utf8mb4;port=".$db_port, $db_user, $db_pass));
$pdo->exec('SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci');

 
Rolly8-HL
Diesen Eintrag dbquery("SET NAMES 'utf8mb4_unicode_ci'"); kann ich bei mir nicht finden, weiß nicht wo ich den verbaut haben soll.
Das andere schaue ich mir mal in Ruhe an.

Bin jetzt etwas verwundert, dieser Eintrag charset=utf8mb4; hat doch mehr etwas mit dem ablegen und aufrufen der Zeichen in/aus der DB zu tun, insbesondere wenn es sich um Umlaute oder Sonderzeichen handelt oder liege ich da falsch?
In einem Update oder Upgrade würden die in der schon bestehenden DB zwar in Reinschrift eingetragen und ausgelesen aber die schon vorhandenen Einträge fehlerhaft dargestellt werden.
Das ganze konnte dann so aussehen ÄÖÜ ß ? äöü äöü.
Die V9 hatte es versuch alles umschreiben zu lassen und ist gerade wenn es sich um große DB Inhalte handelt auf die Nase gefallen.
Habe das mal auf der NSS USA verfolgt bis hin das die Seite unter V9 neu aufgelegt wurde ohne alte DB und jetzt wieder alles beim alten ist ohne V9.

Für diesen Fall würde der Eintrag encoding=utf8mb4 nicht angebrachter sein?

Wenn ich hier einen ganz falschen Gedankensprung habe bitte ich um Entschuldigung.
Bearbeitet von Rolly8-HL am 26.12.2017 um 11:28
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Systemweb
Ich habe eben durch Zufall den Beitrag gefunden, bei dem du das Festlegen des Zeichensatzes falsch eingefügt hattest:
https://www.phpfusion-deutschland.de/...#post_5569
Anders als in meiner Erinnerung hattest du dort aber set charset statt set names eingesetzt. Aber dennoch müsste die von dir eingefügte Zeile
mysqli_set_charset($db_connect, 'utf8');
weiter unten nach dem Abbruch-Befehl bei Fehler eingefügt werden. Kommt nämlich keine DB Verbindung zustande wird andernfalls bei dir erst noch ein weiterer Fehler produziert, bevor das Script mittels die(); gestoppt wird.
 
Rolly8-HL
Das waren noch Zeiten so ganz ohne PDO!
Das ist lange her, hat sich vieles getan und geändert.
https://rolly8-hl.de/infusions/R8HL_d...?dev_id=33

Also ich benutze

Code 

//db_handlers
//mysql_functions_include
mysql_query("SET NAMES 'utf8'");
//pdo_functions_include
$pdo = new PDO("mysql:host=".$db_host.";dbname=".$db_name.";charset=utf8", $db_user, $db_pass);



Getestet unter
PHP Version 5.3.29
PHP Version 5.4.45
PHP Version 5.5.38
PHP Version 5.6.33
PHP Version 7.0.27
PHP Version 7.1.13
PHP Version 7.2.1

Ohne Probleme ohne Fehler im Log, wie hier zu sehen ist Umlaute in Reinschrift in der DB.
https://nobody.rolly8-hl.de
Die Navi st sehr schwer mit DB-Abfragen aber da arbeite ich noch dran.
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Springe ins Forum: