Laden...

MySQL 5.1 Default Value

Erstellt von Sclot vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.137 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren
MySQL 5.1 Default Value

verwendetes Datenbanksystem: MySQL 5.1

Guten Morgen,

Seit kurzem setze ich hier MySQL 5.1 ein und habe jetzt folgendes "Problem":

Hier mal eine Tabellenstruktur:


CREATE TABLE IF NOT EXISTS `ss_infos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projekt` varchar(20) NOT NULL,
  `ordner` varchar(100) NOT NULL,
  `datei` varchar(50) NOT NULL,
  `hist_id` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

Habe ich jetzt einen INSERT, mit dem nicht alle Spalten betroffen sind, bzw gefüllt werden, wie z.B. folgender:


INSERT INTO ss_infos SET projekt='1', order='/', datei='test.txt'

Hierbei wird die spalte "hist_id" nicht gefüllt - bringt er mir den Fehler das "hist_id" keinen DEFAULT Wert hat.
Ja - hat er nicht... soll er aber auch nicht...
Früher hat er da einfach nur einen leeren Eintrag gemacht (entspricht dann DEFAULT '')

Warum funktioniert sowas in MySQL 5.1 nun nicht mehr? 😦

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo Sclot,

ich weiß nicht wie es mit MySQL ist, aber beim MS-SQL Server ist es normal dass wenn man eine Spalte mit NOT NULL deklariert und der DefaultWert nicht gesetzt ist, ein Tuple bei dem jene besagte Spalte nicht angegeben wurde sprich null, diese nicht eingefügt wird.

Warum gibst du nicht expliziet in der CREATE TABLE den default Wert für die Spalte an?

Gruß Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

Weil ich dann 6 Datenbanken mit je etwas über 300 Tabellen überarbeiten müsste 😦

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

Ah.. gefunden...
Das is der Strict Mode.. ist wohl das standard-Verhalten nach der Installation.


# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Wenn man diesen nun auf folgendes setzt:


# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Dann funktioniert mein oben beschriebenes Verhalten weiterhin.

Wenn Jetzt aber gesagt wird, das MSSQL (uns sich damit sicherlich auch andere Datenbanksysteme so verhalten), dann werde ich lieber meine Tabellen überarbeiten um irgendwo einen Standard zu verfolgen.

DANKE!

3.825 Beiträge seit 2006
vor 13 Jahren

Hallo Sclot,

hist_id varchar(11) NOT NULL,

Du hast nur die beiden Möglichkeiten, entweder die Spalten als nullable zu deklarieren oder alle Spalten zu füllen.

Einen Tod muss man sterben 😉

Wenn Du mit einem Dataset arbeitest kannst Du ja vor dem Speichern alle Spalten durchgehen und NUll-Spalten durch "" ersetzen, wenn das Deine Applikation erlaubt.

Weil ich dann 6 Datenbanken mit je etwas über 300 Tabellen überarbeiten müsste

Schreib doch schnell ein Programm dass das für Dich macht.

Warum funktioniert sowas in MySQL 5.1 nun nicht mehr

Ich verstehe allerdings Deine Absicht noch nicht.
Du willst eine Spalte als "NOT NULL" definieren, dann keinen Default-Wert angeben und eine Zeile ohne diese Spalte in der Datenbank speichern ?
Wo ist da der Sinn ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

Frag das denjenigen, der die Alte Datenbank-Struktur sowei das passende Programm geschrieben hat.
Vielleicht war er einfach nur faul? 😉

Ich hab nur die Aufgabe das ding unter MySQL 5.1 lauffähig zu machen.
Wie du schon geschrieben hast: irgendwer muss immer dran glauben, der dann stirbt 😉