Ankündigung

Einklappen
Keine Ankündigung bisher.

MS SQL Server, UTF8 und PHP Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MS SQL Server, UTF8 und PHP Problem

    Hallo zusammen,

    ich habe eine Tabelle im MS SQL Server (13.0.4259.0). Dort gibt es ein Feld Nachname, varchar(255). Diese Tabelle wird über eine Intranetseite (PHP 7.3) mit Daten vom Anwender gefüllt. Im PHP habe ich im head im metaabschnitt text/html; charset=utf-8 eingestellt.

    Wenn ich die Daten einfüge, werden die Umlaute in der SQL Tabelle nicht richtig angezeigt. Erst wenn ich ein utf8_decode() um das Feld eingebe, werden die Umlaute richtig dargestellt. Lasse ich mir die Daten dann aber im PHP anzeigen, sind diese wieder nicht richtig, obwohl korrekt im SQL Server gespeichert wurde. Erst mit einem utf8_encode() werden die Umlaute richtig angezeigt.

    Das kann doch nicht Sinn und Zweck sein oder?

    Was mache ich an welcher Stelle falsch?
    Danke,

    Erik


    *EDIT*
    Habe noch was vergessen zu erwähnen, wenn ich ohne utf8_decode() in die Datenbank einfüge, wird aus Bräuer dann Bräuer. Aber wenn ich den Wert im PHP anzeigen lasse, wird wieder Bräuer daraus.
    Bin ich nur zu krümelkackerisch, oder muss tatsächlich in der Datenbank auch Bräuer stehen, statt Bräuer?

  • #2
    Bitte anschauen:

    https://docs.microsoft.com/de-de/sql...l-server-ver15

    • Stellen Sie sicher, dass die Quell- oder Ziel-Spalte den Typ nchar oder nvarchar aufweist.
    • Geben Sie im Parameterarray SQLSRV_PHPTYPE_STRING('UTF-8') als PHP-Typ an. Oder legen Sie "CharacterSet" => "UTF-8" als eine Verbindungsoption fest.
    P.S.: Außerdem solltet Ihr mal SP2 und CU 11 einspielen. Die Build ist wirklich stark veraltet.
    sorry, shift-taste kaputt

    Kommentar


    • #3
      https://softwareengineering.stackexc...oft-sql-server

      Kommentar


      • #4
        Bei der Datenbankverbindung sind mehrere Faktoren für das Encoding zustäändig: Datenquelle, Datenverbindung und Datenziel. Alle sollten UTF8 sein. Mind. einer davon ist es nicht.
        Verwendest Du PDO oder wie verbidest Du Dich mit dem SQLServer?
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Danke für die schnellen antworten, ich beantworte die erstmal und schaue dann noch mal die Doku von protestix an.

          Also: In der Datenbanktabelle sind die Stringfelder alle als nvarchar. Characterset ist UTF8.
          Ich verwende den MSSQL Server Native SRV treiber.

          Kommentar


          • #6
            Welche API verwendest du in PHP, um auf den Datenbankserver zuzugreifen, und hast du diese auf UTF-8 gesetzt?

            Kommentar


            • #7
              Du musst beim Vebindungsaufbau den Zeichensatz mit angeben

              PHP-Code:
              sqlsrv_connect(host, ['CharacterSet' => 'UTF-8']); 
              Ansonsten da:
              https://docs.microsoft.com/de-de/sql...l-server-ver15

              Kommentar


              • #8
                Werte aus meiner info.php
                PHP Version: 7.3.13
                default_charset = UTF-8
                sqlsrv ExtensionVer 5.6.1+11919

                meinst du das?

                Im PHP arbeite ich mit Scriptcase, ein PHP Builder. Dieser baut die Verbindung auf, aber Zeichensatz habe ich als UTF-8 eingestellt.

                Ich vermute die Verbindung ist richtig, aber die Einstellung im SQL Server sind falsch... kann es noch etwas sein außer die Feldtypen? Die sind alle varchar..

                Kommentar


                • #9
                  hat noch jemand eine Idee?

                  Kommentar


                  • #10
                    Zitat von ny_unity Beitrag anzeigen
                    hat noch jemand eine Idee?
                    Hast du überhaupt die Posts oben gelesen und befolgt??
                    Scheint mir nicht so, nach der phpinfo hat niemand gefragt...

                    Kommentar


                    • #11
                      Ja, habe diese durchgelesen und versucht zu beantworten. Ich bin kein Experte, sorry.

                      Den Verbindungsaufbau macht "Scriptcase". Ich wähle nur den Treiber aus, in dem Falle ja der Native SRV. Ich habe keinerlei Möglichkeiten den Paramter dort mit anzugeben.

                      Kann es eine Treibereinstellung sein?

                      Kommentar


                      • #12
                        Wird wohl an diesem "Scriptcase" liegen, was auch immer das ist. Probiere es doch mal ohne. Und wenns dann funktioniert, wende dich an den Hersteller von diesem "Scriptcase".

                        Kommentar


                        • #13
                          ich habe das charset auf ISO-8859-15 gestellt und seit dem klappt alles so wie ich es wollte.

                          danke für eure zeit und hilfe

                          Kommentar


                          • #14
                            Zitat von ny_unity Beitrag anzeigen
                            ich habe das charset auf ISO-8859-15 gestellt und seit dem klappt alles so wie ich es wollte.
                            Schreib ein € Zeichen mit deiner Antwendung in die Datenbank und schau dir an was in der Datenbank rauskommt. Du hast weiterhin ein Problem mit den Zeichensätzen.

                            Kommentar


                            • #15
                              ISO-8859-15 enthält schon das Euro-Zeichen, ist aber dennoch steinzeitlich.
                              Verwende durchgehend utf8, das ist der heutige Standard.

                              Kommentar

                              Lädt...
                              X