webForumDet fria alternativet
Logga in / Bli medlem

Obligatorisk sträng

Databaser & SQL

7 svar · 238 visningar · startad av Compusa

Medlem sedan jan. 20023 327 inlägg
Trådstart#1
CREATE TABLE KUND(
  kundID MEDIUMINT PRIMARY KEY AUTO_INCREMENT,
  kundFornamn CHAR(50) NOT NULL,
  kundEfternamn CHAR(50) NOT NULL,
  kundGatuadress CHAR(50),
  kundPostnr CHAR(30),
  kundStad CHAR(50),
  kundLand CHAR(50) DEFAULT "Sverige",
  kundTfn CHAR(50),
  UNIQUE (kundFornamn, kundEfternamn, kundGatuadress, kundPostnr, kundStad, kundLand, kundTfn)
) TYPE INNODB;

Jag vill att man inte skall få lämna strängen kundFornamn och kundEfternamn tom. Är det NOT NULL som gäller då med, eller gäller detta bara på tal. Hur skulle det kunna se ut?

Medlem sedan jan. 20023 327 inlägg
#2

Även om jag inte lägger till någon data i kunFornamn och kundEfternamn så godkänns inserten. Varför? NOT NULL är väl att den måste ha ett värde? Hur skall jag gå tillväga?

Medlem sedan dec. 200012 464 inlägg
#3

Det går inte att få Mysql att förbjuda en tom sträng som värde. Det får du kontrollera själv.

Medlem sedan jan. 20023 327 inlägg
#4

Med andra ord så går det bara att hindra tom värden i tex INT?

Medlem sedan juni 200032 967 inlägg
#5

Nej, men du får skilja på tom sträng och null.
Du tror väl inte att du är förhindrad att lagra 0 i ett talfält för att du satt det inte null ska tillåtas?

Medlem sedan dec. 200012 464 inlägg
#6

Nej. Om du har definierat en character column (c) som not null och utan default så ska följande två sql-satser ge fel

insert into t(a,b,d,e) values(1,2,4,5)
insert into t(a,b,c,d,e) values(1,2,null,4,5)

Följande

insert into t(a,b,c,d,e) values(1,2,'',4,5)

ger inte fel.

Medlem sedan jan. 20023 327 inlägg
#7

@nders skrev:

Nej, men du får skilja på tom sträng och null.
Du tror väl inte att du är förhindrad att lagra 0 i ett talfält för att du satt det inte null ska tillåtas?

Nej det tror jag inte, not null innebär väl att den inte får lämnas utan värde och 0 är ett giltigt tal.

LarsG skrev:

Nej. Om du har definierat en character column (c) som not null och utan default så ska följande två sql-satser ge fel

insert into t(a,b,d,e) values(1,2,4,5)
insert into t(a,b,c,d,e) values(1,2,null,4,5)

Följande

insert into t(a,b,c,d,e) values(1,2,'',4,5)

ger inte fel.

Okej nu börjar det klarna lite, not null verkar vara lite lömsk...

Medlem sedan juni 200032 967 inlägg
#8

Nej det tror jag inte, not null innebär väl att den inte får lämnas utan värde och 0 är ett giltigt tal.

Precis, och tom sträng ('') är en jättejättegiltig sträng.

270 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)