MSSQL - Select auf Sonderzeichen in nVarChar-Spalten
Hallo an alle Datenbankadministratoren
Ich bin soeben über ein kleines Problem gestolpert bei dessen Lösung ich etwas Hilfe benötigen würde.
Ich habe eine MSSQL-2005 Datenbank in der u.a. Namen in einer nVarChar-Spalte gespeichert werden. Nun wird diese Datenbank auch auf andere Länder erweitert und aus diesem Grund befinden sich nun Einträge mit Sonderzeichen/Sonderbuchstaben in der DB. Das Problem ist nun, dass diese mit einem Select nicht mehr gefunden werden.
Beispiel:
Der Dateiname: Podpůrné
funktionierendes Select:
nicht funktionierend:
Das Problem ist hier eindeutig dieses spezielle u.
Da ich ungern die Selects bearbeiten möchte lautet meine Frage nun:
Wie bringe ich dem SQL-Server bei das er auch diese seltsame ů und andere Buchstaben aus den osteuropäischen Sprachen erkennt? Natürlich möchte ich dabei nicht die Unterstützung z.B. der deutschen Umlaute oder andere Zeichen verlieren.
Für Tipps wäre ich sehr dankbar.
Grüße
Update:
Mit einem Zusatz:
funktioniert die Abfrage nun. Hierbei ist allerdings das Problem, dass das nur für Tschechisch funktioniert. Muss ich wirklich jedem Select die Sprache mitgeben oder gibt es einen anderen Weg?
Ich bin soeben über ein kleines Problem gestolpert bei dessen Lösung ich etwas Hilfe benötigen würde.
Ich habe eine MSSQL-2005 Datenbank in der u.a. Namen in einer nVarChar-Spalte gespeichert werden. Nun wird diese Datenbank auch auf andere Länder erweitert und aus diesem Grund befinden sich nun Einträge mit Sonderzeichen/Sonderbuchstaben in der DB. Das Problem ist nun, dass diese mit einem Select nicht mehr gefunden werden.
Beispiel:
Der Dateiname: Podpůrné
funktionierendes Select:
SELECT * from Object WHERE Name like '%Podp_rné%'
nicht funktionierend:
SELECT * from Object WHERE Name like '%Podpůrné%'
SELECT * from Object WHERE Name = 'Podpůrné'
Das Problem ist hier eindeutig dieses spezielle u.
Da ich ungern die Selects bearbeiten möchte lautet meine Frage nun:
Wie bringe ich dem SQL-Server bei das er auch diese seltsame ů und andere Buchstaben aus den osteuropäischen Sprachen erkennt? Natürlich möchte ich dabei nicht die Unterstützung z.B. der deutschen Umlaute oder andere Zeichen verlieren.
Für Tipps wäre ich sehr dankbar.
Grüße
Update:
Mit einem Zusatz:
SELECT * from Object WHERE Name = 'Podpůrné' COLLATE CZech_CI_AI
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 176573
Url: https://administrator.de/contentid/176573
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
Das Zauberwort heißt in dem Fall ganz klar UTF-8.
Sollte das Programm z.B. in PHP, C++, C# geschrieben sein, gibt es spezielle Befehle, die SQL Query nach UTF-8 konvertieren zu lassen.
Ebenso gilt dies für die Tabellen. Hast Du hier z.B. 8859-1 drinnen oder latin-general-ci kann es hierbei zu den beschriebenen Problemen bekommen.
Gerade wenn kyrillisch oder asiatische Schriftsätze benutzt werden (müssen).
Gruß
Das Zauberwort heißt in dem Fall ganz klar UTF-8.
Sollte das Programm z.B. in PHP, C++, C# geschrieben sein, gibt es spezielle Befehle, die SQL Query nach UTF-8 konvertieren zu lassen.
Ebenso gilt dies für die Tabellen. Hast Du hier z.B. 8859-1 drinnen oder latin-general-ci kann es hierbei zu den beschriebenen Problemen bekommen.
Gerade wenn kyrillisch oder asiatische Schriftsätze benutzt werden (müssen).
Gruß
Moin ChrFriedel,
probier es mal mit:
Durch das 'N' vor der Zeichenkette machst Du diese zum nvarchar, welches die ganzen Sonderzeichen beherrscht. Ohne das 'N' wird die Suchzeichenfolge in varchar umgewandelt, die die Sonderzeichen eben nur in den speziellen Sprachen kennt.
Gruß, Mad Max
probier es mal mit:
SELECT * from Object WHERE Name like N'%Podpůrné%'
Durch das 'N' vor der Zeichenkette machst Du diese zum nvarchar, welches die ganzen Sonderzeichen beherrscht. Ohne das 'N' wird die Suchzeichenfolge in varchar umgewandelt, die die Sonderzeichen eben nur in den speziellen Sprachen kennt.
Gruß, Mad Max
Zitat von @ChrFriedel:
Ich nochmal kurz:
Jup ich hab als Standard latin-general-ci eingestellt. Aus der Liste geht für mich aber keine Einstellung hervor die
suggeriert mit allen Sonderzeichen umgehen zu können. Übersehe ich diese oder gibt es das tatsächlich nicht?
Ich nochmal kurz:
Jup ich hab als Standard latin-general-ci eingestellt. Aus der Liste geht für mich aber keine Einstellung hervor die
suggeriert mit allen Sonderzeichen umgehen zu können. Übersehe ich diese oder gibt es das tatsächlich nicht?
Da meine MSSQL Kenntnisse mittlerweile stark eingerostet sind, muss ich gestehen, ich weiß nicht, ob und wie es einen UTF-8 oder sogar UTF-16/32 Satz gibt in MSSQL..
Google hat mir aber 2 Sachen geliefert, die ein Ansatz sein könnten:
http://support.microsoft.com/kb/232580/EN-US/ <- eher Programmiererseite
http://entwickler-forum.de/showthread.php?p=31808 <- vorallem der letzte Beitrag ist interessant, aber ich würde mir den ganzen Thread und weiterführende Links mal ansehen
Zitat von @ChrFriedel:
Vielen Dank für deine Mühe!
Aber siehe weiter oben. Es geht noch viel einfacher *g*
Grüße
Vielen Dank für deine Mühe!
Aber siehe weiter oben. Es geht noch viel einfacher *g*
Grüße
Gern geschehen. Mal gleich merken, falls ich auf die wahnwitzige Idee kommen sollte, jemals wieder eine MSSQL zu benutzen