Announcement

Collapse
No announcement yet.

Select findet Wortformen!?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select findet Wortformen!?

    Hallo zusammen,

    ich bin gerade dabei mein erstes Projekt mit MS SQL Server 2008 zu realisieren. Ich habe dazu kein passendes Forum gefunden, hoffe aber, dass mir im 2005er Forum eventuell auch weitergeholfen werden kann. Ich habe leider keine Ahnung, mit welchen Suchwörtern ich bei Google & Co. eine Lösung finden könnte, deshalb versuche ich es mal hier:

    Es geht darum, dass wenn ich nach "grüsse" suche auch "grüße" gefunden wird. Aber das Verhalten möchte ich gar nicht. Beispiel:

    Code:
    CREATE TABLE wordindex (id INT NOT NULL PRIMARY KEY IDENTITY, word VARCHAR(255) NOT NULL, UNIQUE(word))
    GO
    
    INSERT INTO wordindex (word) VALUES ('grüße')
    GO
    
    SELECT * FROM wordindex WHERE word IN ('grüsse')
    GO
    Zumindest bei meiner 2008er Express-Installation findet der Server den Datensatz mit word='grüße'. Wie kann man sowas abschalten oder eventuell mit einer anderen Syntax verhindern? Prinzipiell ist so ein Feature ja schön und gut, aber für meine Zwecke ist es vollkommen unbrauchbar...

    Grüße
    Andreas

  • #2
    Die passende Collation nehmen...
    [HIGHLIGHT="SQL"]BEGIN TRANSACTION;
    CREATE TABLE wordindex
    ( id INT NOT NULL PRIMARY KEY IDENTITY
    , word VARCHAR(255) COLLATE German_PhoneBook_100_BIN2 NOT NULL UNIQUE
    );
    INSERT INTO wordindex (word) VALUES ('grüße');
    INSERT INTO wordindex (word) VALUES ('grusse');
    SELECT * FROM wordindex WHERE word = 'grüsse';
    ROLLBACK;[/HIGHLIGHT]

    Was es für Collations gibt, bekommt man mit "SELECT * FROM fn_helpcollations ()" heraus

    Comment


    • #3
      Das hängt davon ab, welche COLLATION man verwendet. Probiere folgendes:
      Code:
      if 'grüße' collate Latin1_General_CI_AI = 'grüsse' collate Latin1_General_CI_AI select 'gleich'
      else select 'ungleich'
      
      if 'grüße' collate Latin1_General_BIN = 'grüsse' collate Latin1_General_BIN select 'gleich'
      else select 'ungleich'
      .. alles klar?
      Eine Standardcollation definiert man normalerweise das erste Mal beim Installieren des SQL-Servers. Die meisten beachten diesen Punkt aber zuwenig bzw. übersehen das überhaupt. Legt man nun eine Datenbank an, kann man entweder die Standardcollation des SQl-Servers verwerwenden oder eine eigene angeben. Und last but not least kann man beim Anlegen einer Spalte in der Tabelle nochmals eine eigen Collation angeben. Wenn's dann immer noch nicht passt, lässt sich auch direkt im SQL-Statement die default-collation nochmals übersteuern.

      bye,
      Helmut

      Comment


      • #4
        COLLATION - das Wort des Tages (meines Tages). Genau dieser Begriff hat mir (unter Anderem) gefehlt. Nachdem ich die Sortierung der Datenbank geändert und alle Tabellen neu erstellt hatte, funktionierte die Abfrage auch so, wie sie sollte. Super!

        Ich verwende seit ca. > 10 Jahren MySQL primär als DBMS und mache gerade meine meine ersten Erfahrungen mit MS SQL. Es ist schwierig...

        Ich danke Euch beiden für die sehr hilfreichen Tipps!

        Grüße,
        nd

        Comment


        • #5
          Ich verwende seit etwa 10 Jahren den SQL-Server, wenn ich jetzt was mit MySQL machen müsste, würde es mir auch nicht besser gehen als dir. Aber genau deswegen gibt es ja diese Foren

          bye,
          Helmut

          Comment


          • #6
            Ich finds aber erstaunlich dass der SQL Server das vorkonfiguriert so macht. Ich hätte eher erwartet, dass man sowas dazu konfigurieren KANN. Als standardeinstellung hät ich das eher nicht vermutet. Find ich fast schon unfug. Wer braucht sowas denn bitte standardmäßig?

            Comment


            • #7
              Besonders geschickt finde ich es auch nicht. Wobei ich zugeben muss, dass ich den Server "mal schnell" in meiner Entwicklungsumgebung installiert habe, ohne mich vorher mal näher mit dem Thema MS SQL beschäftigt zu haben. Ob ich während der Installation gefragt wurde, welche Collation ich per Default verwenden möchte, weiss ich ehrlich gesagt gar nicht mehr...

              Die Tatsache, dass per Default eine Collation verwendet wird, bei der "grüsse" mit "grüße" offensichtlich gleichgestellt ist, halte ich für äußerst ungünstig. Sowas muss man wissen, sonst kann das böse enden. Gerade Umsteigern, die z.B. von MySQL kommen, wird es durch solche Kleinigkeiten meiner Meinung nach unnötig schwer gemacht.

              Andereseits - RTFM. Aber das muss Microsoft wissen. Ich fand den Einstieg in PostgresSQL und SQLite jedenfalls wesentlich einfacher...

              Grüße
              nd

              Comment

              Working...
              X