SQLServer Notizen
Allgemeine Datenbankeinstellungen
Es wird von folgenden Standardwerten ausgegangen:
ANSI_NULL_DEFAULT=ON
ANSI_NULLS=OFF
ANSI_PADDING=OFF
ANSI_WARNINGS=OFF
ARITHABORT=OFF
CONCAT_NULL_YIELDS_NULL=OFF
QUOTED_IDENTIFIER=OFF
NUMERIC_ROUNDABORT=OFF
RECURSIVE_TRIGGERS=OFF
Linux-Webserver
Allgemeine Einstellungen
Unter Linux muss die Erweiterung "mssql" verwendet werden, welche auf FreeTDS basiert. Diese verhält sich in einigen Fällen abweichend von der offiziellen Microsoft-Erweiterung "sqlsrv".
Die Datei "freetds.conf" sollte die folgenden Parameter (entweder global oder als Serverkonfiguration) enthalten:
tds version = 8.0 client charset = UTF-8
Folgende Werte sind für in der PHP-Konfiguration (php.ini) empfohlen:
mssql.datetimeconvert = Off mssql.charset = "UTF-8"
Dies behebt auch die Fehlermeldung:
Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.
Datum-Typ
Der Typ "Datum", eingeführt mit SQL-Server 2008, wird von der MSSQL-Erweiterung nicht unterstützt, Workarounds sind derzeit leider technisch nicht sinnvoll möglich. Daher muss bei Feldern dieses Typs eine Prüfung erfolgen, ob der Wert ein Objekt vom Typ DateTime oder ein String ist. Dieser kann in den meisten Fällen direkt einem DateTime-Konstruktor übergeben werden:
$obj = mssql_fetch_result($result); if(is_string($obj->datecol)) $obj->datecol = new \DateTime($obj->datecol);
Abgeschnittene Texte
Werden Texte oder Binärwerte abgeschnitten, kann dies mit den folgenden Einstellungen (php.ini) teilweise behoben werden:
mssql.textlimit = 65536 mssql.textsize = 65536
Anm.:
Werte der php.ini können ggf. auch per ini_set(SCHLÜSSEL, WERT) gesetzt bzw. überschrieben werden. Dies kann beispielsweise in den Konfigurationsdateien geschehen.