I have always loved programming - its like Lego without gravity.

Basic on my ZX81 graduating to assembler and Turbo Pascal during my teens.

Developed phone OS software - engineer, architect, product manager - but got made irrelevant by the iPhone and redundant by Android.

These days I mostly work with data, big data and fitting big data onto small boxes.

Oh MySQL I hate you

Top 5 lists are super-good link bait, so I’ll make my own sad one.

In no particular order, and not stopping at 5:

  1. your table names are case-sensitive on some platforms (and, on some platforms, dependent on file system type!) but not others
  2. data definitions (DDL) are not in transactions
  3. you don’t have a transaction-safe memory table (so create them temporarily for each connection, and clear them manually on rollback)
  4. you can mix transaction-safe and non-transaction safe tables in a transaction and, if it rolls back, the non-transaction safe tables are not rolled back.  And this is silently accepted
  5. the default character set is latin1.  Well, its not even latin1 apparently, its just called that.  Its actually cp1252 with eight characters randomly shifted around. You have to configure the server / database / column to be something else and configure your client to get back what you put into character columns; in Python, configuring the client is a few switches scattered about and not just one.  And I have a hazy memory of having to slap “BINARY” keywords on my VARCHAR columns to get out what I put in or something.  From the docs:
    The description in the following sections may appear complex, but it has been found in practice that multiple-level defaulting leads to natural and obvious results.
    Yeah right!
  6. and the UTF-8 isn’t actually proper full UTF-8, it has UCS2 internally somewhere so no Klingon code-points apparently.  You need to specify “utf8mb4” if you’re storing music
  7. InnoDB is shockingly slow if you don’t have nice sequential primary keys
  8. well, its shockingly slow any which way
  9. it defaults to non-transaction-safe table types (on some platforms and packaging)
  10. sometimes on some clients and some platforms at some strictness levels it will create tables in the default storage engine if it doesn’t recognise your storage engine
    CREATE
                    TABLE silly (id INTEGER) ENGINE=MyIASM;
    Query OK, 0 rows affected, 2 warnings (0.12 sec)
    +---------+------+-----------------------------------------------+
    | Level | Code | Message
    +---------+------+-----------------------------------------------+
    | Warning | 1286 | Unknown storage engine 'MyIASM'
    | Warning | 1266 | Using storage engine InnoDB for table 'silly'
  11. and I haven’t even started on the MySQL dialect of SQL!

What have I missed?  What’s your favourite - eh, least favourite - feature of MySQL?

Hate On!

(You may also like: Google: moreSQL is real and how I got massively faster DB with async batching)

jump to ↓



performance
Faster searches with non-prefix fields in composite indices
Compressing MySQL databases
What highscalability.com says about Scaling my Server
Scaling my Server: follow-up
old classics
The kid's computer
Making the History of Worlds Religions map
If you defend those involved in the OpenGL ES specification, you are an idiot
Stackoverflow unwinding?
general
Why Swift?
Python annotations and type checking
pycon 2014 Sweden: the bad bits
Table-based Template Translation in C++
recreation
games programming
Perlin Noise
Perlin Noise
Drawing RTS maps fast
WillCity update
ludum-dare
Ludum Dare #35 Mosaic
LudumDare 33 wallpapers
SSIM vs MSE for Mosaics
Ludum Dare 30 results are in!