← Back to context

Comment by ventana

2 hours ago

> C-style strings being a thing at all really hurts.

Well, C strings exist and are probably here to stay.

I believe Pascal strings, where the length is stored in the 0th character, were much worse (also, obligatory reference to Joel Spolsky's “Back to Basics” and “fucked strings” [1]).

Looks like we only got enough memory to spare to allow arbitrary length strings with arbitrary characters – that is, being able to use 2 or 4 bytes for the length of every string – in 1990s or so, when C++ strings and similar types became popular.

[1]: https://www.joelonsoftware.com/2001/12/11/back-to-basics/

> Pascal strings, where the length is stored in the 0th character, were much worse

Until unicode became widely supported, many databases used to reserve 1 byte for the length of a VARCHAR, typically at the 0th position of the column. The content was understandably limited to 255 characters.

Because of that extra byte per row, it is considered a waste of memory to use VARCHAR for data that is expected to be fixed-length. Well, it's an even larger waste in some cases. A certain popular ORM continues to insist on mapping UUID to VARCHAR(36), wasting a whopping 21 bytes per row! Certainly something to keep in mind at a time when both RAM and disks are expensive.

SQLite of course doesn't care, and stores all string as TEXT.