2009-05-22 14 views
1

Ich habe entdeckt, dass die Ergebnisse von meinem SQL Server kommen, werden die Feldnamen, die gekürzt:PHP & SQL Server - Feldnamen abgeschnitten

$query = "SELECT some_really_really_long_field_name FROM ..." 
... 
print_r($row); 

array(
    'some_really_really_long_field_n' => 'value' 
) 

Wer weiß, wie dieses Verhalten zu vermeiden?

Ich denke, der Datenbanktreiber ist ADODB.

Sie müssen also nicht zählen: Die Feldnamen werden auf 31 Zeichen gekürzt.

SQL Server scheint nicht die langen Feldnamen an sich zu kümmern, so kann ich nur vermuten, dass es irgendwo im ADODB-Treiber einen char [32] String-Puffer gibt, der die langen Namen nicht enthalten kann.

Antwort

5

Sie verwenden wahrscheinlich den jahrzehntelangen, veralteten MSSQL-Client. Verwenden Sie die new MSSQL driver for PHP from Microsoft oder installieren Sie die MSSQL-Client-Tools von Ihrer MSSQL-Server-CD.

+2

"Funktionen, die einen Spaltennamen zurückgeben, basieren auf der Funktion dbcolname() in DBLIB. DBLIB wurde für SQL Server 6.x entwickelt, wobei die maximale Bezeichnerlänge 30 beträgt. Aus diesem Grund beträgt die maximale Spaltenlänge 30 Zeichen. " – TML

+0

Das hat wirklich gut funktioniert. –

1

einfachste Weg, abgeschnittene Feldnamen zu vermeiden, ist kürzer Feldnamen zu verwenden ....

Sorry, das wie eine beschissene Antwort klingt, aber es ist viel sauberer, einfacher zu lesen und zu verwalten, und eine bessere Praxis gerecht.

2

können Sie einen Aliasnamen für Ihre langen Feldnamen, so etwas wie folgt verwenden:

$query = "SELECT some_really_really_long_field_name AS short_alias FROM ..." 

dies für Ihr aktuelles Problem umgehen. Aber ich schlage vor, PDO MSSQL-Treiber zu verwenden, um eine Verbindung zur Datenbank herzustellen.