Nicole: MYSQL - ZAHLEN PROBLEM

Hallo erst mal ;-)
Heute habe ich etwas erlebt was mich schockiert,
so ich doch bisher immer so gearbeitet habe
und jetzt vielleicht alles umstellen muss.

Mein Problem:

Für lange Zahlenreihen verwende ich immer
varchar als type in mysql, aufgrund der anfänglichen
bigint Probleme in mysql.

Nun wollte ich ein Feld abfragen in dem ich
einen wert eingab. In diesem Fall um eine Zeitangabe abzufragen.

Also:#
select * from table where  ttx >= '934236000'
EINTRÄGE = 0

Ich versuchte:
select * from table where  ttx >= '1000'
EINTRÄGE = 522

Dann versuchte ich:
select * from table where  ttx >= '100000'
EINTRÄGE = 522

Dann versuchte ich:
select * from table where  ttx >= '3000'
EINTRÄGE = 0

------------------------------
Also das Problem:
Es darf keine Zahl gösser als 1 am Anfang stehen.

HILFE;,, Was ist passiert ???
Bisher habe ich nie Probleme damit bemerkt.

Gruss Nikki

  1. Hi,

    select * from table where  ttx >= '934236000'

    dies trifft z.B. auf '94' zu.

    select * from table where  ttx >= '1000'

    Mögliche Kandidaten sind '999' und '1001'.

    select * from table where  ttx >= '3000'

    Ein Wert wie z.B. '100000000000000' ist hier nicht inbegriffen.

    HILFE;,, Was ist passiert ???

    Strings werden als Strings verglichen. Du versuchst, sie als Zahlen zu sehen - die Datenbank nicht, weil dafür kein Grund existiert.

    Bisher habe ich nie Probleme damit bemerkt.

    Schade, das ist nämlich schon immer falsch gewesen. Speichere Zahlen als Zahlen und _nur_ als Zahlen. Beschäftige Dich auch mit der umfangreichen Menge an Datumstypen.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Strings werden als Strings verglichen. Du versuchst, sie als Zahlen zu sehen - die Datenbank nicht, weil dafür kein Grund existiert.

      Schade, das ist nämlich schon immer falsch gewesen. Speichere Zahlen als Zahlen und _nur_ als Zahlen. Beschäftige Dich auch mit der umfangreichen Menge an Datumstypen.

      Hallo Cheatah,
      Manchmal ist es aber notwendig ein Feld
      zu haben dass beides sowohl Zahlen als auch Buchstaben
      aufnimmt.
      Und dann gibt es keine Möglichkeit innerhalb dieses Feldes
      nach Zahlen zu suchen die als erste Ziffer grösser als
      1 sind ? ?

      Auch stellt sich das Problem bei extrem langen Zahlenketten,
      welchen TYP soll man da nehmen wenn BIGINT nicht reicht ???

      ---------------

      Warum unterscheidet die MYSQL zwischen Werten grösser
      als 1 am Anfang, denn mit 1 gehts ja auch.

      Gruss Nikki

      1. hi,

        Manchmal ist es aber notwendig ein Feld
        zu haben dass beides sowohl Zahlen als auch Buchstaben
        aufnimmt.

        warum?
        es gibt fast immer eine sauberer möglichkeit.

        Und dann gibt es keine Möglichkeit innerhalb dieses Feldes
        nach Zahlen zu suchen die als erste Ziffer grösser als
        1 sind ? ?

        strings haben keine erste ziffer, sondern nur ein erstes zeichen - das ist ein kleiner, aber feiner unterschied.

        nach allen strings in diesem feld, deren erstes zeichen grösser als "1" ist, kannst du aber natürlich trotzdem suchen lassen - wobei die gleichzeitige einschränkung <= "9" eventuell ebenfalls erforderlich wird, falls du dich auf ziffernwerte beschränken willst.

        Auch stellt sich das Problem bei extrem langen Zahlenketten,
        welchen TYP soll man da nehmen wenn BIGINT nicht reicht ???

        wofür werden denn diese "extrem langen Zahlenketten" überhaupt gebraucht?
        dass man mehrere milliarden trillionen grosse _zahlen_ wirklich braucht, scheint mir ein sehr absonderlicher anwendungsfall zu sein.
        wahrscheinlich gibt es bessere lösungen.

        Warum unterscheidet die MYSQL zwischen Werten grösser
        als 1 am Anfang, denn mit 1 gehts ja auch.

        hä?

        du musst dir einfach den unterschied zwischen einer nummerischen und einer alphanummerischen sortierung klar machen.

        die zahl 999 ist natürlich kleiner als 1000 - aber wenn es sich um strings handelt, wird ein zeichen nach dem anderen verglichen - und dabei ist nun mal schon das erste zeichen von "999" grösser als das von "1000", und damit insgesamt "999" > "1000".

        gruss,
        wahsaga