Startpage > Techblog > Posts with tag: sql-server
mro

Einem seltsamen Problem im Zusammenhang mit der Lucene-Search, MS-SQL und PHP auf der Kommandozeile bin ich kürzlich auf die Spur gekommen. Auf einem Windows-Server mit MS-SQL 2000 waren bei einer Webanwendung in den Suchergebnissen sämtliche deutschen Umlaute verschwunden – Begriffe mit Umlauten wurden demzufolge von der Suche auch nicht gefunden.

In der CP1252-encodierten MS-SQL-Datenbank standen  jedoch alle Umlaute korrekt und auch im normalen UTF-8 codierten Webfrontend gab es kein Umlautproblem; die  dazwischengeschaltete iconv-Zeichensatz Umwandlung von PHP funktionierte also prinzipiell ebenfalls.

Ein Blick in den Suchindex mit Hilfe von Luke bestätigte den Verdacht, dass der gesamte Index keinerlei Umlaute enthielt. Die Ursache konnte demzufolge nur damit zusammenhängen, dass der Lucene-Suchindex über die Kommandozeile mit dem PHP- Command Line Interface aufgebaut wurde. Offenbar liefert MS-SQL andere Daten, abhängig vom Kontext in dem es aufgerufen wird.

Nach einer längeren Recherche fand  sich dann auch tatsächlich folgendes:

The Microsoft library (DBLIB) detects the context it is used in. Calling a php script using the cli version of PHP uses the default codepage for a DOS box (437 for US). If the same script is called from CGI or ISAPI it will use the Ansi codepage (1252 or whatever your system is configured for).

Tatsächlich lieferte die Datenbank bei ISAPI-Aufrufen CP1252 zurück, vom CLI kam jedoch CP850 an, das alte westeuropäische MS-DOS Standardencoding.

Nun hätte man mittels iconv natürlich auch CP850 in UTF-8 umwandeln können, allerdings gab es ja bereits eine iconv-Konvertierung von CP1251 nach UTF-8, diese Möglichkeit schied also aus. Letztgenannte sorgte übrigens für das vollständige Verschwinden aller Umlaute aus dem Suchindex, sodass nicht einmal mehr die falschen Sonderzeichen im Suchindex gelandet sind.

Die Lösung für den schwer durchschauenden Fehler war dann letztlich jedoch einfach: Oben genanntes Verhalten des MS-SQL Servers lässt sich über eine Checkbox im SQL-Server-Clientkonfigurationsprogramm unter “DB-Bibiliotheksoptionen” steuern.

Entfernt man das Häkchen bei “Automatische Konvertierung von ANSI in OEM” werden die Daten auch auf der Kommandozeile im vorgegebenen Format (hier CP1252) ausgeliefert.

Wird dann der Suchindex neu aufgebaut, klappt es auch mit den Umlauten.

Falls man keinen Zugriff auf den SQL-Server hat, oder die Einstellung aus einem anderen Grund nicht ändern will, kann man das Problem auch umgehen. Dazu ersetzt man den Kommandozeilenaufruf der php.exe durch den ebenfalls im PHP-Standard enthaltenen php-win.exe Wrapper. Dadurch wird dem SQL-Server ein ISAPI-Aufruf vorgegaukelt und er liefert ebenfalls das korrekte Encoding zurück.

Comment Feed Trackback URL
mhy

Am 29. und 30. September fand im Kultur- und Kongresszentrum in Rosenheim eine Konferenz  statt, die sich ganz dem Thema SQL-Server widmete – die SQLdays.

Der Morgen des ersten Tages begann mit einer Keynote von Steffen Krause (Technical Evangelist, Microsoft Germany), der einen Überblick über die Neuerungen in SQL Server 2008 R2 gab – mit dabei “Madison”, “Gemini”, Reporting Services und Complex Event Processing.

Durch diese Keynote und mein latent vorhandenes Interesse für Business Intelligence wurde auch mein Interesse für das Projekt Gemini geweckt und ich begab mich direkt im Anschluss in eine Session in der Markus Raatz tiefergehende Informationen und ein Beispiel für Gemini zeigte. Mittlerweile hat Gemini einen neuen Namen und heißt PowerPivot – trotzdem ist der Ansatz nach wie vor interessant und ich werde mich noch etwas mehr damit beschäftigen.

Da Steffen Krause bereits bei einer unserer UserGroup-Treffen über die Best Practises mit SQL Server und SharePoint gesprochen hat, zog es mich dann in die Session von Georg Gamsjäger, der Tipps und Tricks zum Auffinden problematischer Abfragen gab. Hier gab es zwar keine wesentlichen neuen Erkenntnisse für mich – aber es ist ja auch ein gutes Gefühl, zu wissen, dass man bisher alles richtig gemacht hat.

Im Anschluss daran gab Markus Raatz noch einen kleinen Überblick, welche hilfreichen Tools CodePlex für das Thema BI bereithält und nach einer kurzen Kaffeepause zeigte er, wie man Reporting Services als OLAP-Client verwenden kann und wie man mit Hilfe von MDX-Parametern komplexe Anforderungen umsetzen kann.

Den Abschluss des Abends bildete eine Abendveranstaltung, auf der soziale Kontakte gepflegt werden konnten und das ein oder andere Thema auch außerhalb von SQL-Server besprochen werden konnte.

Der zweite Tag begann für mich mit einer Präsentation von Klaus Aschenbrenner, der in seiner Session “Service Broker 0 to 100″ mit uns gemeinsam eine SOA-Anwendung basierend auf dem SQL Server Service Broker aufbaute.

Danach zog es mich in die Session von Peter Gentsch, der zeigte, wie Social Mining im Web 2.0 funktioniert und wie diese Daten so aufbereitet werden können, dass Trends erkennbar und auswertbar sind.

Im Anschluss daran zeigte Andreas Rauch anhand von ein paar No-Code-Beispielen wie man SQL-Server-Daten im SharePoint anzeigen kann und wies auf Fallstricke hin. Er fuhr dann auch gleich mit dem Thema “Performance Tuning” fort wobei er im Grunde zeigte, wie anhand von Ausführungsplänen nachvollzogen werden kann, was SQL Server eigentlich treibt und an welchen Stellen man wie optimierend eingreifen kann.

Die letzte Session bildete für mich dann ein Vortrag von Klaus Aschenbrenner, in dem er den syntaktischen Zucker zeigte, der mit T-SQL in der SQL-Server Version 2008 hinzugekommen ist.

Zusammengefasst waren es zwei informative Tage und auch wenn einiges aus der täglichen Arbeit schon bekannt war, so gab es doch den ein oder anderen nützlichen Hinweis – sowohl aus den Sessions als auch aus den Gesprächen während der Kaffeepausen.

Comment Feed Trackback URL
dri

Am 07.09.2009 fand in Dresden die bereits im Vorfeld hier erwähnte Jubiläumsveranstaltung der SQL Pass Group statt. Thema sollte die bevorstehende Release 2 von SQL Server 2008 (Codename Madison) mit ihren Möglichkeiten zu Self Service BI, SQL Server Data Warehouse Scale Out und weiteren Neuheiten sein.

Leider musste Sprecher Georg Urban wegen Krankheit kurzfristig absagen, weshalb die Veranstaltung wohl hätte ins Wasser fallen müssen, wenn PASS-Organisator Ralf Dietrich nicht einen vollwertigen Ersatz “besorgt” hätte: Andreas Wolter informierte über Reporting Services 2008 Berichtsdesign Features.

Berichte auf Basis der Reporting Services 2008 sehen auf den ersten Blick mit RS 2005 fast identisch aus. Unter der Haube aber ergeben sich ganz neue Möglichkeiten. Andreas Wolter stellte neue bzw. verbesserte Features wie Tablix, Charts und Gauges (KPI) mit möglichen Anwendungsszenarien vor. Zum Schluss gab es mit dem aktuellen Report Builder 3.0 CTP doch noch einen Vorab-Blick auf Release 2, dort stachen insbesondere die wirklich gut integrierten Bing Maps sehr positiv hevor.

Am Ende waren sich alle darin einig, dass es ein äußerst informativer Vortrag (dafür ein Dankeschön an Andreas)  zu einem interessanten Thema und deutlich mehr als ein “Lückenbüßer” (und dafür noch eines an Ralf, der dies noch so kurzfristig “heranorganisierte”) war!

Am 20.11.2009 ist das nächste Treffen der PASS Regionalgruppe Sachsen angesetzt, Thema wird SQL Server Sizing mit einer kurzen Einführung und anschließender Diskussion/ Erfahrungsaustausch sein. Der am Montag ausgefallende Vortrag von Georg Urban soll nicht aufgehoben, sondern nur aufgeschoben sein: geplant ist Januar 2010, der konkrete Termin wird dann rechtzeitig auf der Webseite der Regionalgruppe Sachsen bekannt gegeben.

Comment Feed Trackback URL
dri

Das nächste SQL Pass Treffen der Regionalgruppe Sachsen findet bereits am 07.09.2009 18:30 wie gewohnt im IT Trainingshaus (mittlerweile in den neuen Räumlichkeiten im 4. Obergeschoss) statt.

Es gibt eine Jubiläumsveranstaltung anlässlich des 5-jährigen Bestehens von PASS Deutschland e.V. und einen Vortrag zum Thema “SQL Server 2008 R2: Self Service BI, SQL Server Data Warehouse Scale Out und weitere Neuheiten”.

Anmelden kann man sich wie immer mit einer kurzen Mail an Ralf Dietrich (rdi@sqlpass.de) oder an Ulrich Walter (uwa@sqlpass.de). Weitere Informationen gibt es auf der Homepage der Regionalgruppe Sachsen.

Comment Feed Trackback URL
dri

Am 27.04.2009 fand im IT Trainingshaus ein Treffen der Regionalgruppe Sachsen der SQL Pass Deutschland statt. Diese SQL Server Usergroup trifft sich ca. alle 2 Monate in Dresden, Organisator ist Ralf Dietrich, welcher auch einen beachtlichen Anteil an Vorträgen zu den Treffen beisteuert. Des Weiteren werden im Wechsel Vorträge durch andere Mitglieder der Usergroup oder auch externe Speaker übernommen und natürlich kommt auch Networking nicht zu kurz.

Thema des gestrigen Treffens war die Europäische PASS Konferenz 2009, von der Ralf Dietrich ganz frisch und aus erster Hand berichtete. Davor und danach gab es einen angeregten Erfahrungsaustausch zum Thema SQL Server & Co. zwischen den Teilnehmern, wobei auch die von Microsoft gesponsorten belegten Brötchen ihre Abnehmer fanden ;-) .

Wer an einer Mitarbeit in der Usergroup interessiert ist oder einfach mal beim nächsten Treffen vorbeischauen möchte, informiert sich am besten unter http://www.sqlpass.de/Regionalgruppen/Sachsen.

Comment Feed Trackback URL
mhy

Um aus einem Datum mit Uhrzeit, wie es beispielsweise GETDATE() zurückliefert, ein Datumswert ohne Uhrzeit zu machen, sind bis zur Version 2005 des SQL-Servers einige Verrenkungen notwendig.

Ich möchte hier ein paar Lösungsansätze aufzeigen. Diese sind nach meiner Präferenz sortiert:

  1. SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
  2. SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
  3. SELECT CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112)

Es gibt sicher noch einige weitere. Nachteil der meisten Methoden ist entweder eine unsichere Konvertierung um Zeichenfolgen (hier ist die Sprache des SQL-Servers zu berücksichtigen) oder eine lange Ausführungszeit aufgrund eines komplizierten Ausführungsplanes.

Im SQL-Server 2008 wurde der Datentyp DATE eingeführt, der diese umständlichen Berechnungen unnötig macht. Das Statement lautet dann:

SELECT CONVERT(DATE, GETDATE())

Comment Feed Trackback URL

Tag Cloud

Unsere Themen

Kommentare

  • Christian Heindel: Hallo Volti, die Option “Verbindung mit ‘Dokumentbibliothek̵ 7; herstellen”...
  • volti: Hi, ich hab das beschriebene Probleme mit Outlook 2010, dort finde ich die Option Aktionen >...
  • Michael Wittwer: Hallo Guter Beitrag, bin seit kurzem auch mit Balsamiq am arbeiten und die Effizienz ist einfach...
  • Frank: Danke, tut und ist im Vergleich zur Atlassian Lösung abwärtskompatibel bis Confluence 2.10.
  • Ghost@: Danke für die schnelle Antwort Martin! Das ist natürlich ärgerlich, dass der Datentyp nicht unterstützt ist....

Twitter