Tijdens programmeren in PHP voor de ene website heb ik aantal problemen tegengekomen dat me nodige kopzorgen heeft bezorgd.
Stel de situatie eens voor:
Veld Cancel in MySQL tabel staat op VARCHAR(4) met NULL mogelijkheid. Standaard bij leeg insert: NULL
In form is er een vinkveld gemaakt met als waarde "ja". Aangevinkt geeft dus waarde af van "ja" en uitgevinkt geeft niks af, dus ""
Waarde in tabel plaatsen geeft geen problemen.
Maar nu moet ik query maken zoals:
SELECT * FROM artikel WHERE cancel<>"ja"
Het resultaat op het scherm gaf na onderzoek echter niet alle waarden terug. Er wordt toch nog zomaar aantal rows overgeslagen.
Andere pogingen zoals REGEXP of NOT LIKE geven zelfde probleem weer.
Alleen als men cancel="ja" van maakt, dan klopt het pas wel.
Verder heeft cancel="" ook geen nut. Het slaat ook aantal rows over.
Het staat dus vast dat NULL stand nodige problemen geeft om lege velden te vergelijken.
In NULL mode merk ik dat er wel 3 standen mogelijk zijn in de veld:
Veld bevat waarde -> vergelijkbaar
Veld bevat geen waarde -> niet vergelijkbaar
Veld bevat NULL waarde -> kan vergelijkbaar zijn (denk cancel=NULL) maar kan me ook vergissen.
Controle op aanwezigheid van NULL waarden: "NOT NULL" of "NULL" geven beide zelfs zelfde resultaat.
De vergelijkingsproblemen zijn meteen weg als ik veld op "not null" mode zet. Een normale mode kennelijk. Nu zijn er 2 standen mogelijk. De command WHERE cancel<>"ja" of WHERE cancel="" werkt weer naar behoren.
Het staat dus vast dat NULL mode een aparte staat is. Hoe ga je zo om met vergelijken met zulke velden op aanwezigheid van waarden? Want dat is veel lastiger dan zonder NULL mode.
Waarvoor gebruikt men NULL mode eigenlijk voor?
Wat is hierop je antwoord?
Stel de situatie eens voor:
Veld Cancel in MySQL tabel staat op VARCHAR(4) met NULL mogelijkheid. Standaard bij leeg insert: NULL
In form is er een vinkveld gemaakt met als waarde "ja". Aangevinkt geeft dus waarde af van "ja" en uitgevinkt geeft niks af, dus ""
Waarde in tabel plaatsen geeft geen problemen.
Maar nu moet ik query maken zoals:
SELECT * FROM artikel WHERE cancel<>"ja"
Het resultaat op het scherm gaf na onderzoek echter niet alle waarden terug. Er wordt toch nog zomaar aantal rows overgeslagen.
Andere pogingen zoals REGEXP of NOT LIKE geven zelfde probleem weer.
Alleen als men cancel="ja" van maakt, dan klopt het pas wel.
Verder heeft cancel="" ook geen nut. Het slaat ook aantal rows over.
Het staat dus vast dat NULL stand nodige problemen geeft om lege velden te vergelijken.
In NULL mode merk ik dat er wel 3 standen mogelijk zijn in de veld:
Veld bevat waarde -> vergelijkbaar
Veld bevat geen waarde -> niet vergelijkbaar
Veld bevat NULL waarde -> kan vergelijkbaar zijn (denk cancel=NULL) maar kan me ook vergissen.
Controle op aanwezigheid van NULL waarden: "NOT NULL" of "NULL" geven beide zelfs zelfde resultaat.
De vergelijkingsproblemen zijn meteen weg als ik veld op "not null" mode zet. Een normale mode kennelijk. Nu zijn er 2 standen mogelijk. De command WHERE cancel<>"ja" of WHERE cancel="" werkt weer naar behoren.
Het staat dus vast dat NULL mode een aparte staat is. Hoe ga je zo om met vergelijken met zulke velden op aanwezigheid van waarden? Want dat is veel lastiger dan zonder NULL mode.
Waarvoor gebruikt men NULL mode eigenlijk voor?
Wat is hierop je antwoord?