← Back to context

Comment by munchler

3 days ago

I don't buy that. The string "Null" is different from the keyword null in programming, so `if $var = null` would be false when $var is the string "Null".

Note that when interpolated into SQL, the contents of $var must be surrounded by single quotes, so you end up with `insert into Table (Name) values ('Null')`, which correctly inserts the string "Null" into the table.

If you were to leave off the quotes, you'd get a SQL syntax error for all other people, so that code would never make it into production. E.g. `insert into Table (Name) values (Smith)` is a syntax error.

> $req = "insert into people (name) ('$name')";

> $db.exec($req)

Now you have "null" as strings in the DB in any language that interpolates null as "null".

> select * from people where name is not null

"Why do we see nulls in testing? Damn, the DB has dirty data. Go through the trouble of fixing it, or...

> select * from people where name is not null and name != "null"

The end. Sorry Mr Null.

> I don't buy that.

I think you underestimate how many systems are stringly-typed, not just in terms of problematic programming languages, but data traveling between different APIs or through literal dead-tree paperwork.

They don't have to all fail at null handling, just one or two can gum up the works.

I don't buy that type-checkers would look at the value null, and say "Yep, that's a String/Integer/User". But here we are.