Announcement

Collapse
No announcement yet.

MS SQL Unicode und PHP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MS SQL Unicode und PHP

    Hallo.

    Ich stehe vor der Aufgabe Unicode Data aus einer PHP-Applikation in eine MS SQL 2000 Datenbank befüllen zu müssen.

    Irgendwie scheint das aber nicht zu funktionieren, fremdländische Zeichen aus zB. osteuropäischen Sprachen oder griechisch werden inkorrekt abgebildet. Webseitig wird alles korrekt dargestellt. Die Felder sind nvarchar(4000)

    Welche Einstellung (Kolloation etc.) muss ich beim Erstellen einer DB und dem dynamischen Erzeugen von Tabellen beachten, damit ich diese mit Unicode befüllen kann?

    Hat jemand vielleicht schon mal eine ähnliche Problematik gehabt?

    Kann ich allenfalls Daten datenbankseitig mit einem T-SQL Statemeant in UCS-2 konvertieren?

    Besten Dank für Hilfestellungen

  • #2
    Was heißt "inkorrekt" abgebildet? Als Feldtyp reicht nvarchar/ntext. Alle sonstigen Angaben wie Kollation wirken auf Sortierreihenfolge und die Regeln bei Like-Abfragen.
    Der Fehler muß also auf PHP-Seite (Dein Anwendung bzw. PHP-Treiber für MS SQL Server liegen.

    Comment


    • #3
      es wird wohl am treiber liegen.

      griechisch oder kyrillisch wird beispielsweise in der webapplikation korrekt dargestellt, in der db aber werden kryptische zeichen dargestellt.

      gibt es den ein besonders geeigneter treiber? ich ahbe bisher via odbc den mssql und auch von openlink einen versucht.

      Comment


      • #4
        Nochmal: Was heißt kryptisch? Wie wäre es mit einem Beispiel?

        Comment


        • #5
          Entschuldige für mein ungenaues Posting
          Dieser Text
          на зажимах


          wird in der DB Ansicht (via Enterprise Manager) so dargestellt, egal ob das Feld varchar oder nvarchar ist: завинчивает

          Hat das etwas mit irgend einer ANSI-Einstellung zu tun? Oder muss ich für die DB noch etwas PHP-seitig umwandeln?


          Ich habe PHP-seitig die Daten auch schon zu UCS-2 konvertiert, aber die enthaltenen Sonderzeichen im String führen zum Abbruch der SQL-Transaktion.

          Comment


          • #6
            Schaut mir danach aus als würde der PHP-DB-Treiber die Daten UTF8-Codiert aufbereiten und dann als varchar-Felder versuchen an die DB zu übergeben.
            Such mal im Treiber ob du mit UTF8 irgendwelche Einstellungen findest.

            Comment


            • #7
              So ein Zufall, dass ihr genau jetzt über mein Problem diskutiert. Hab nämlich das gleiche.

              Felder sind auf nchar. Die PHP App zeigt an, dass die Query in UTF-8 is. Aber der Server schreibt nur Fragezeichen rein. Auch wenn ich das ganze im Query Analyzer abschieß.

              Wenn ich dagegen den kyrillischen Text copy und direkt im Enterprise Manager in die Zeile paste speichert er es einwandfrei.

              Hier mal die betroffene Query:

              INSERT INTO import_vreportnet
              (HIFNR, HIO01, VOBEZ01)
              VALUES
              (28, 'хххххххххх', 'Кінцевий споживач; ; ')

              Was für Treiber meint ihr denn da? Ist der Treiber denn auch relevant, wenn ich die Query vom Query Analyzer aus abschieße.

              Comment


              • #8
                Originally posted by Baunz View Post
                Ist der Treiber denn auch relevant, wenn ich die Query vom Query Analyzer aus abschieße.
                Microsoft wird ja wohl keinen PHP-DB-Treiber für ihren Query Analyser einsetzen ...

                Nochwas. Ich kenn mich mit der Unicode-Problematik aus und mit dem MS SQL-Server aber hab absolut keinen blassen Schimmer über PHP. Also für Detailfragen zu dem PHP-Teil dieses Problems müssten andere mit Helfen.

                Comment


                • #9
                  Kennt ihr das? Man sucht stunden und wenn man sich endlich durchgerungen hat nen forumseintrag zu posten findet man 10 Min später die Lösung.

                  Und zwar kann man Query-Ausdrücken den Prefix N mitgeben, damit er den folgenden String als Unicode erkennt.

                  In meinem Beispiel:
                  INSERT INTO import_vreportnet
                  (HIFNR, HIO01, VOBEZ01)
                  VALUES
                  (28, N'хххххххххх', N'Кінцевий споживач; ; ')

                  Endlich dieses nervige Problem (zumindest für mich. wie isses bei dir, eisenstein?) gelöst.

                  Comment


                  • #10
                    Generell ist die verwendung von Parametriesierten Abfragen anzuraten um nicht in das Problem von SQL-Injection zu laufen (Wenn einer deiner Wert z.B. "'; DROP DATABASE xyz;" wäre

                    Comment


                    • #11
                      Originally posted by Baunz View Post
                      Endlich dieses nervige Problem (zumindest für mich. wie isses bei dir, eisenstein?) gelöst.

                      PHP-seitig nicht. Es sieht immer noch gleich aus. Wie nimmst du die Verbindung mit der DB auf? Via odbc, PDO oder mssql - Funktionen?

                      Comment


                      • #12
                        hehe, tja, war in meiner überschwenglichen Freude etwas zu schnell.
                        PHPseitig gehts bei mir auch noch net :-(

                        Aber wenn dus trotzdem wissen willst -> ich benutz mssql-funktionen

                        Comment


                        • #13
                          Die Zeichen sind ANSI kodiert. Wenn ich die "falschen" DB-Einträge in z.B. einen Texteditor mit ANSI-Formatanzeige per copy und paste eintrage und dann die Anzeige des Editors auf UTF-8 umstelle werden die Daten korrekt angezeigt.

                          Comment


                          • #14
                            Ok, um trotzdem zu einer Lösung zu kommen->
                            was hats mit benutzen von odbc oder pdo auf sich?

                            Würde hier ein Umstellen helfen?

                            Comment


                            • #15
                              Mit ODBC kannst du natürlich verschiedene ODBC Treiber nutzen.

                              PDO wird seit PHP 5 mitgeliefert und bietet eine objektorientiere DB-Schnittstelle für verschiedenste Datenbanken an. Mehr findes du unter http://de.php.net/manual/de/ref.pdo.php

                              Comment

                              Working...
                              X