Datenbank Tabellen Spalte Typ ändern
Kodi
- datenbank
Einen guten Tag allen.
Ich brauche den msql Befehl mit dem ich einen Tabellen Typ
änern kann, denn ich finde nichts was funktioniert.
Habe eine Spalte [seit] als Timestamp(14).
Diese Spallte soll vom Typ aber Varchar(14) werden.
Kann mir jemand helfen?
Gruss
Kodi
Mahlzeit,
Habe eine Spalte [seit] als Timestamp(14).
Diese Spallte soll vom Typ aber Varchar(14) werden.
Warum willst Du das? Willst Du es Dir unnötig verkomplizieren, wenn Du Dir z.B. alle Einträge seit dem soundsovielten ausgeben lassen willst oder den durchschnittlichen Wert aller Einträge vom wasweißichwievielten berechnen willst? Welchen guten Grund sollte es geben, einen Zeitstempel in einem VARCHAR-Feld zu speichern?
Oder enthält die Spalte des Typs TIMESTAMP gar keinen Zeitstempel?
MfG,
EKKi
Mahlzeit,
Habe eine Spalte [seit] als Timestamp(14).
Diese Spallte soll vom Typ aber Varchar(14) werden.Warum willst Du das? Willst Du es Dir unnötig verkomplizieren, wenn Du Dir z.B. alle Einträge seit dem soundsovielten ausgeben lassen willst oder den durchschnittlichen Wert aller Einträge vom wasweißichwievielten berechnen willst? Welchen guten Grund sollte es geben, einen Zeitstempel in einem VARCHAR-Feld zu speichern?
Oder enthält die Spalte des Typs TIMESTAMP gar keinen Zeitstempel?
Ich habe ein Skript das ich zum Download anbiete und dort habe
ich eine Userdaten Tabelle und das Feld ,,seit,, als Timestamp erstellt.
Nur wenn ich einen User nun update wird die spalte ,,seit,, mit einem
neuen Timestamp versehen. Das möchte ich aber nicht.
Das Feld soll nicht mehr änderbar sein, weil es das Anlegedatum des
Users ausgeben soll.
Hatte anfangs einen Fehler gemacht.
Kodi
Hallo
Ich habe ein Skript das ich zum Download anbiete und dort habe
ich eine Userdaten Tabelle und das Feld ,,seit,, als Timestamp erstellt.
also ist ein Datumsdatentyp genau richtig und ein VARCHAR genau falsch.
Nur wenn ich einen User nun update wird die spalte ,,seit,, mit einem
neuen Timestamp versehen. Das möchte ich aber nicht.
Das Feld soll nicht mehr änderbar sein, weil es das Anlegedatum des
Users ausgeben soll.
Dann entferne den Zauber, der für das automatische Aktualisieren zuständig ist, siehe Handbuch, ich zitiere:
<zitat>
Mit DEFAULT CURRENT_TIMESTAMP-, aber ohne ON UPDATE-Klausel hat die Spalte
den aktuellen Zeitstempel als Vorgabewert, wird jedoch nicht automatisch
aktualisiert.
</zitat>
Hört sich doch danach an, als möchtest Du genau das haben.
Freundliche Grüße
Vinzenz
Mit DEFAULT CURRENT_TIMESTAMP-, aber ohne ON UPDATE-Klausel hat die
Spalte
den aktuellen Zeitstempel als Vorgabewert, wird jedoch nicht automatisch
aktualisiert.
Hört sich doch danach an, als möchtest Du genau das haben.
Danke, das hilft mir weiter.
Ich überlege nun aber ob ich statt beim Timestamp beim Varchar bleibe.
Hab herausgefunden wie ich den Spalten Typ ändere.
$sql7 = mysql_query("ALTER TABLE ".TABLE\_LOGIN\_USER."
CHANGE seit seit varchar(14) NOT NULL");
Ich brauche ja nur beim Anlegen eines neuen Users das aktuelle
datum als varchar in die Datenbank eintragen. Ändert sich ja eh nichts
mehr an dem Wert.
Ich danke vielmals für eure Hilfe.
Viele Grüße und noch mal dank
Kodi
Mahlzeit,
Ich überlege nun aber ob ich statt beim Timestamp beim Varchar bleibe.
...
Ich brauche ja nur beim Anlegen eines neuen Users das aktuelle
datum als varchar in die Datenbank eintragen. Ändert sich ja eh nichts
mehr an dem Wert.
Genau. Und wenn Du dann Probleme mit dem Berechnen hast, wieviele User seit wann neu dazugekommen sind, fragst Du aber bitte NICHT hier nach - denn wir haben Dir schließlich abgeraten, einen nicht geeigneten Feldtyp für Deine Spalte zu nehmen.
MfG,
EKKi
Genau. Und wenn Du dann Probleme mit dem Berechnen hast, wieviele User seit wann neu dazugekommen sind, fragst Du aber bitte NICHT hier nach - denn wir haben Dir schließlich abgeraten, einen nicht geeigneten Feldtyp für Deine Spalte zu nehmen.
Hatte einfach nicht gedacht das es dann Probleme geben könnte, da
der eingetragene Wert der gleiche bleibt.
Muss ich mich nun entschuldigen?
Vielen Dank auf jeden Fall, werde das dann ändern.
Gruss
Kodi
Mahlzeit,
Hatte einfach nicht gedacht das es dann Probleme geben könnte, da
der eingetragene Wert der gleiche bleibt.
Klar, wenn Du den Wert nur reinschreibst und anschließend nie wieder beachtest, wäre es kein Problem. Aber dann bräuchtest Du ihn auch gar nicht erst zu speichern. Normalerweise geht man wohl eher davon aus, dass man die Daten, die man in einer Datenbank(tabelle) speichert, auch irgendwann entweder nochmal ausliest oder als Kriterium für eine Abfrage benutzt.
Und genau dann gäbe es Probleme: wenn Du dann mit einem String (denn nichts anderes ist ein VARCHAR) rechnen wollen würdest (denn nichts anderes sind Datumsfunktionen). Benutze für jede Art von Daten, die Du in einer Datenbank(tabelle) speichern willst IMMER die richtigen passenden Feldtypen - sonst wirst Du nahezu IMMER irgendwann Probleme bekommen.
Muss ich mich nun entschuldigen?
Nein, natürlich nicht. :-)
MfG,
EKKi
Klar, wenn Du den Wert nur reinschreibst und anschließend nie wieder beachtest, wäre es kein Problem. Aber dann bräuchtest Du ihn auch gar nicht erst zu speichern. Normalerweise geht man wohl eher davon aus, dass man die Daten, die man in einer Datenbank(tabelle) speichert, auch irgendwann entweder nochmal ausliest oder als Kriterium für eine Abfrage benutzt.
Dieser wert wird nur einmal beim anlegen eines Kunden in die Datenbank
geschrieben und nicht mehr verändert. Es ist das datum an dem
der Kunde angelegt worden ist.
Der Wert wird nur zur Ausgabe und einmal zur Sortierung ausgelesen.
Einen String aus Zahlen lässt sich doch auch sortieren oder nicht?
Ich werde mal sehen das ich es dann gleich richtig mache.
Danke
Kodi
Mahlzeit,
Dieser wert wird nur einmal beim anlegen eines Kunden in die Datenbank
geschrieben und nicht mehr verändert.
Darum geht's gar nicht (ob er verändert wird oder nicht).
Es ist das datum an dem der Kunde angelegt worden ist.
Das ist klar.
Der Wert wird nur zur Ausgabe und einmal zur Sortierung ausgelesen.
Genau DA liegt das Problem (bei der Sortierung - bzw. bei der Verwendung als Suchkriterium).
Einen String aus Zahlen lässt sich doch auch sortieren oder nicht?
Ja. Aber nicht unbedingt nach kalendarischen Erfordernissen. Wenn Du das Feld als VARCHAR als Such- oder Sortierkriterium benutzen würdest und z.B. alle Kunden, die seit dem soundsovielten als Kunden angelegt wurden, sortiert nach dem Datum der Neuanlage haben möchtest, müsste für jedes Feld einzeln der Wert intern erstmal von einem String in einen Datumswert umgerechnet werden, dann verglichen werden usw. - abgesehen davon, dass Indizes auf einem VARCHAR bei der Umrechnung in Datumswerte ungefähr überhaupt nicht helfen.
Ich werde mal sehen das ich es dann gleich richtig mache.
Besser wäre es - sonst ärgerst Du Dich in einigen Monaten schwarz.
MfG,
EKKi
Besser wäre es - sonst ärgerst Du Dich in einigen Monaten schwarz.
Ich danke noch einmal sehr für deine Hilfe.
Will nun nicht die ganze Hand aber falls du noch ein
paar Zeilen übrig hast und es zufällig aus dem Ärmel schütteln kannst!?
Ich hab nun schon viele Varianten durch, aber
es wird die Spalte einfach nicht angelegt.
Das sind nur einge von vielen Versuchen.
Ich finde nichts was mich weiter bringt.
timestamp(14) NOT NULL default CURRENT_TIMESTAMP
timestamp NOT NULL default CURRENT_TIMESTAMP
timestamp default CURRENT_TIMESTAMP
Will nun nicht die ganze Hand aber falls du noch ein
paar Zeilen übrig hast und es zufällig aus dem Ärmel schütteln kannst!?
So alles Klar ich habe es geschafft.
seit timestamp(14) NOT NULL default TIMESTAMP
Grusank
Kodi
So alles Klar ich habe es geschafft.
seit timestamp(14) NOT NULL default TIMESTAMP
Hab ich gedacht.
ENDE
Hallo
Ich überlege nun aber ob ich statt beim Timestamp beim Varchar bleibe.
Nein, das ist gar keine gute Idee.
Ich brauche ja nur beim Anlegen eines neuen Users das aktuelle
datum als varchar in die Datenbank eintragen. Ändert sich ja eh nichts
mehr an dem Wert.
ja und, aber vielleicht einmal Zeiträume abfragen. Dafür sind Datums- und Zeittypen ideal. TIMESTAMP mit DEFAULT CURRENT TIMESTAMP ist wunderbar passend für Deine Anforderung. Alles andere suboptimal ...
Freundliche Grüße
Vinzenz