Warning: mssql
Hallo zusammen,
ich habe für testzwecke einen ms sql 2000 server. nun mache ich eine abfrage über php mit folgendem code:
[code]
$verbindung = mssql_connect("sqltestserver","sa","millch") or die
("Keine Verbindung moeglich");
mssql_select_db("ida_test_kunden") or die
("Die Datenbank existiert nicht");
$sql = 'SELECT * FROM kunden WHERE KDNR1 = 01279';
$ergebnis = mssql_query($sql);
while($row = mssql_fetch_object($ergebnis))
{
$kdnr1 = $row->KDNR1;
$name1 = $row->NAME1;
$name2 = $row->NAME2;
$strasse = $row->STRASSE;
$plz = $row->PLZ;
$ort = $row->ORT;
}
[/code]
leider bekomme ich eine fehlermeldung, aus welcher ich nicht schlau werde:
Warning: mssql_query() [function.mssql-query]: message: Unicode-Daten in einer Nur-Unicode-Sortierung oder ntext-Daten können nicht an Clients gesendet werden, die DB-Library (z.B. isql) oder ODBC, Version 3.7 oder früher, verwenden. (severity 16) in C:\xampp\htdocs\Auftrag\db_connect_test.php on line 10
kann mir bitte jmd weiterhelfen?
Gruß ottscho
ich habe für testzwecke einen ms sql 2000 server. nun mache ich eine abfrage über php mit folgendem code:
[code]
$verbindung = mssql_connect("sqltestserver","sa","millch") or die
("Keine Verbindung moeglich");
mssql_select_db("ida_test_kunden") or die
("Die Datenbank existiert nicht");
$sql = 'SELECT * FROM kunden WHERE KDNR1 = 01279';
$ergebnis = mssql_query($sql);
while($row = mssql_fetch_object($ergebnis))
{
$kdnr1 = $row->KDNR1;
$name1 = $row->NAME1;
$name2 = $row->NAME2;
$strasse = $row->STRASSE;
$plz = $row->PLZ;
$ort = $row->ORT;
}
[/code]
leider bekomme ich eine fehlermeldung, aus welcher ich nicht schlau werde:
Warning: mssql_query() [function.mssql-query]: message: Unicode-Daten in einer Nur-Unicode-Sortierung oder ntext-Daten können nicht an Clients gesendet werden, die DB-Library (z.B. isql) oder ODBC, Version 3.7 oder früher, verwenden. (severity 16) in C:\xampp\htdocs\Auftrag\db_connect_test.php on line 10
kann mir bitte jmd weiterhelfen?
Gruß ottscho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 16090
Url: https://administrator.de/forum/warning-mssql-16090.html
Ausgedruckt am: 05.04.2025 um 17:04 Uhr
15 Kommentare
Neuester Kommentar

Hol' Dir mal von Microsoft die aktuellen Data Access Components. Geh' dort ins Downloadcenter und suche nach MDAC_TYP. Installier das Package auf dem Client, von dem Du die Abfrage machst. Sollte danach funktionieren.

Auf was für einem Windows wolltest Du das denn installieren?
Nebenbei: Dein SQL-Statement an sich funktioniert und liefert das von Dir erwartete Ergebnis? Hast Du es mal im Query Analyzer ausgeführt? Was hat das Feld KDNR1 für einen Datentyp? Hintergrund dieser Fragen: Du fragst da ein Feld KDNR1 auf einen numerischen Wert 01279 ab, wobei da die führende Null überhaupt keinen Sinn macht.
dba
Nebenbei: Dein SQL-Statement an sich funktioniert und liefert das von Dir erwartete Ergebnis? Hast Du es mal im Query Analyzer ausgeführt? Was hat das Feld KDNR1 für einen Datentyp? Hintergrund dieser Fragen: Du fragst da ein Feld KDNR1 auf einen numerischen Wert 01279 ab, wobei da die führende Null überhaupt keinen Sinn macht.
dba

Ändere mal den Abfragestring so ab, dass der Vergleichswert in einfachen Anführungszeichen steht. Außerdem setzt Du noch ein Unicode-kennzeichnung davor. Dein Stringinhalt muss also so aussehen:
SELECT * FROM kunden WHERE KDNR1 = N'01279'
Vielleicht hilft das in Deinem speziellen Fall weiter.
SELECT * FROM kunden WHERE KDNR1 = N'01279'
Vielleicht hilft das in Deinem speziellen Fall weiter.

Datentyp ändern - zumindest mal testweise - oder muss die Kundennummer zwingend unicodefähig sein? Kannst Du am einfachsten mit dem Enterprisemanager machen.
Mit allem, was Richtung PHP geht, bin ich nicht der richtige, das geht an meinem Gebiet weit vorbei.
Mit allem, was Richtung PHP geht, bin ich nicht der richtige, das geht an meinem Gebiet weit vorbei.

Wenn man Daten nicht ändern kann, hilft es, eine View zu definieren und die Spalte dann mit einem convert zu füllen. Du läßt dann deine Scripte auf die View zugreifen und kannst so einen Workaround schaffen.

create view v_test
as
select
feld1 as f1,
feld2 as f2,
convert(varchar(30), KDNR1) as f3
... weitere Felder
from Tabellenname
Eine View verändert nichts an den originalen Tabellen, sonder ermöglicht lediglich eine andere Sicht auf die Daten. Man setzt das oft auch im Rechtemanagement ein. Ich kenne Unternehmen, bei denen es untersagt ist, direkt auf Tabellen zuzugreifen. In den Tabellen sind die Daten in kompletter ausbaustufe enthalten.
Beispiel: Personaldaten bestehen aus Adresse und Gehaltsinformationen. Es existieren nun unterschiedliche Views, nämlich welche, die sämtliche Daten beinhalten, aber auch andere, die die Gehaltsdaten gar nicht führen. Der normale Anwender bekommt nur die Berechtigung für die View, die keine Gehaltsdaten enthält. So kannst Du gewährleisten, dass niemand an die Gehaltsinformationen kommt, weil sie gar nicht in der View enthalten sind.
Soll als grobe Erklärung erstmal reichen. Auf jeden Fall müsstest Du damit Dein Problem so lange umschiffen können, bis Du ein Update erhalten hast.

Nee, solange Du nicht in die Tiefe einsteigst und mit indizierten Views beginnst zu arbeiten, kannst Du das vernachlässigen.