Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL 5] Strict mode vraagje

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

  • Yobby
  • Registratie: September 2002
  • Laatst online: 20-11 15:54
Na mijn overstap van XP naar Vista, heb ik ook mijn webserver-progs geupdate. Apache 1.33 naar 2.2.6, PHP 4.nogwat naar 5.2.5, en MySQL 4.1 naar 5.1.22-rc-community.

Na wat strubbelingen zijn mijn websites weer bereikbaar en worden ze goed weergegeven.

Maar in de backend van mijn cms zit nog wat SQL-code waar een foutmelding bij komt. Strict mode uitzetten verhelpt het wel, maar ik pas liever de code of de database aan. Alleen weet ik niet hoe.

Bij de query:
code:
1
INSERT INTO content( pageid, section ) VALUES ('1', 'main')

krijg ik de foutmelding: #1364 - Field 'Tekst' doesn't have a default value
Maar het veld 'Tekst' is van het type Text, en dat accepteert geen default.

Is de enige remedie Tekst ook in de query op te nemen met lege value '' ?

Yobby


  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 10:02

djiwie

Wie?

Kun je 'Tekst' niet nullable maken?

[ Voor 18% gewijzigd door djiwie op 14-01-2008 15:23 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ik betwijfel of dat het oplost en het is bovendien bad practice. Kolommen moet je altijd 'not null' willen specificeren, tenzij je de null value echt nodig hebt.

Of je geeft een waarde in je insert query, of je wil blijkbaar niet strict draaien. :)

{signature}


  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 10:02

djiwie

Wie?

Een lege tekstvalue kun je gelijk stellen aan null in mijn ogen.
Als je een veld not null wil maken moet je er ook wat in invullen... 8)7

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Nullable maken zal het probleem wel oplossen. En ook geen bad practice mijns inziens.... waarom zou je een veld niet nullable mogen maken? Bad practice is in je insert-statement velden toevoegen die je niet wil specificeren.

When life gives you lemons, start a battery factory


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
djiwie schreef op maandag 14 januari 2008 @ 15:40:
Een lege tekstvalue kun je gelijk stellen aan null in mijn ogen.
Sorry, maar dan weet je niet wat null betekent. Tussen '' (lege string) en NULL zit een wereld van verschil. ;)
KabouterSuper schreef op maandag 14 januari 2008 @ 15:44:
En ook geen bad practice mijns inziens.... waarom zou je een veld niet nullable mogen maken?
Je wil een datatype dat zo goed mogelijk bij de inhoud van die kolom past. Heb je geen null values nodig, dan defineer je dat zo. Granted, het is niet zo erg als een varchar ipv een int gebruiken oid, maar imo moet je wel nadenken of je echt null values nodig hebt.
Bad practice is in je insert-statement velden toevoegen die je niet wil specificeren.
Maar wat nou als je zeker weet dat er nog geen tekst is?

{signature}


  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 10:02

djiwie

Wie?

Voutloos schreef op maandag 14 januari 2008 @ 15:57:
[...]
Sorry, maar dan weet je niet wat null betekent. Tussen '' (lege string) en NULL zit een wereld van verschil. ;)
Dat weet ik ook wel, maar als je een veld niet wilt specificeren in je insert query heb je een ontbrekende waarde --> NULL. Als je een lege string in je insert query zet is de waarde lege string, dus de waarde is wel ingevuld, alleen staat er toevallig niets in.

  • Yobby
  • Registratie: September 2002
  • Laatst online: 20-11 15:54
Ok, dank voor jullie antwoorden.

Voorlopig zet ik Strict mode wel even uit, om rustig de tijd te hebben om alles stukje bij beetje aan te passen.

Yobby


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
djiwie schreef op maandag 14 januari 2008 @ 16:14:
[...]

Dat weet ik ook wel, maar als je een veld niet wilt specificeren in je insert query heb je een ontbrekende waarde --> NULL. Als je een lege string in je insert query zet is de waarde lege string, dus de waarde is wel ingevuld, alleen staat er toevallig niets in.
Dan blijft de vraag waarom wil je het niet specificeren?
Heeft het geen betekenis in dit geval dan kan het in mijn optiek naar NULL.
Is er een kans dat er later wel een waarde ingevuld wordt dan moet je gewoon een lege string sturen. Want dan is het imho geen onbekend meer, maar gewoon nog niet ingevuld dus leeg.

En omdat TS het heeft over dat het veld geen default accepteert vermoed ik dat het niet onbekend is, maar dat het alleen maar leeg is.

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 10:02

djiwie

Wie?

In dat geval is er inderdaad niets op tegen om de lege string gewoon mee te geven in de insert.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Voutloos schreef op maandag 14 januari 2008 @ 15:32:
Ik betwijfel of dat het oplost en het is bovendien bad practice. Kolommen moet je altijd 'not null' willen specificeren, tenzij je de null value echt nodig hebt.
En die heb je nodig in alle gevallen waarin een kolom 'nog niet ingevuld' of 'hoeft niet ingevuld te worden' kan zijn. Dat is in mijn ervaring vrij regelmatig, dus waarom een nullable kolom 'bad practice' zou zijn, is mij een raadsel.

Wie trösten wir uns, die Mörder aller Mörder?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je kan natuurlijk ook mijn 2e post lezen, want KabouterSuper stelde reeds hetzelfde en dar heb ik ook al lang en breed antwoord op gegeven. Als jij null vaak nodig hebt, so be it. Maar maak niet standaard alle kolommen nullable omdat je te lui bent om er over na te denken.

{signature}


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Voutloos schreef op dinsdag 15 januari 2008 @ 08:00:
Je kan natuurlijk ook mijn 2e post lezen, want KabouterSuper stelde reeds hetzelfde en dar heb ik ook al lang en breed antwoord op gegeven.
KabouterSuper gaf geen reden om kolommen nullable te maken. Het antwoord 'je moet nadenken of je null values nodig hebt' geeft geen antwoord op mijn vraag. Het heeft niets te maken met de stelling dat het 'bad practice' is om kolommen nullable te maken.

Ik begrijp nu dat je eerste antwoord gewoon onduidelijk was, omdat je bedoelde dat het bad practice is om kolommen by default of 'zomaar' nullable te maken. Dat lees je er niet in, als je niet al weet wat je bedoelt.

Wie trösten wir uns, die Mörder aller Mörder?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tja, je kan ook de 2e zin van die eerste post lezen ipv meteen na de 1e zin op tilt te slaan.

{signature}


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 20-11 13:35
Daaruit werd het ook in mijn opinie niet duidelijk hoor, ik zou Confusions reactie dan ook nauwelijks als 'op tilt slaan' beschouwen. Het komt vrij vaak voor dat je gebruikers optionele velden voorschotelt (bekend voorbeeld: een gebruikersprofiel), het is juist bad practice om dan nullable velden niet null te maken en een lege string als waarde te geven. Eigenlijk zou je veel algemener moeten zeggen dat niet nadenken wat je doet of waarom je iets doet bad practice is, maar dat spreekt voor zich :)

Verder vraag ik me af hoe de TS erbij komt dat een text veld niet NULL mag zijn? Net nog even getest hier (eveneens 5.1 server) en daarin kan ik dat prima opgeven? :?

//edit
I stand corrected, een default value mag niet behalve als die default value NULL is. ;)

[ Voor 19% gewijzigd door FragFrog op 15-01-2008 09:56 ]

[ Site ] [ twitch ] [ jijbuis ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
TS zegt dat er geen default value opgegeven kan worden, en dat klopt.

{signature}


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Confusion schreef op dinsdag 15 januari 2008 @ 07:51:
[...]

En die heb je nodig in alle gevallen waarin een kolom 'nog niet ingevuld' of 'hoeft niet ingevuld te worden' kan zijn. Dat is in mijn ervaring vrij regelmatig, dus waarom een nullable kolom 'bad practice' zou zijn, is mij een raadsel.
Hangt ervanaf wat je definitie van nog niet ingevuld is. En wat je met de gegevens wilt doen. Heb je het over een veldje geslacht dan zou ik hem null maken, heb je het over een geboortejaar dan zou ik hem null maken.
Heb je het over een sig van een forum dan vind ik het geen boeiende info, plak je hem gewoon onderaan een forumpost dan is het voor mij non-nullable, want je maakt het alleen maar ingewikkelder door het nullable te maken. Gooi je eerst een lijn en daarna pas de sig dan is het voor mij wel nullable omdat je nog iets met die data gaat doen.
Heb je het weer over de forumpost zelf dan is die altijd nonnullable omdat je hem altijd nodig hebt.

Het hangt er dus maar net vanaf wat je nu ( en in de toekomst ) met de data wil doen of een veld nullable moet zijn of niet ( alhoewel er zo weinig mogelijk velden nullable moeten zijn imho ontkom je er heel vaak niet aan )
Pagina: 1