Apparent vs. actual data integrity

Posted in: Technical Track

I realized tonight exactly why MySQL’s default behavior of silent truncation bothers me.

It reminds me of people who use a ticketing system and close every ticket as soon as they are done working on the issue instead of actually asking the other party if they are satisfied, because closing more tickets make it look like they’re doing more work.

It reminds me of workers at fast food restaurants who hit the button to make the order disappear as if they have already served me my food, because then their throughput times are faster.

Similarly, with MySQL’s default behavior of silent truncation, it’s as if the database server is saying “the fewer database errors raised, the better.” As in the previous two examples, the metrics do not matter if the quality of service is poor — particularly when the quality of service is poor specifically *because* people are trying to meet the metrics instead of the actual goal — customer satisfaction.

While it’s true that the goal is fewer database errors, the idea is to have fewer errors because there are fewer problems — not because the problems are not being reported!!!

Interested in working with Sheeri? Schedule a tech call.

3 Comments. Leave new

Really have to agree with you on this one. Silent truncation is poisonous for applications because once you start ignoring the errors it’s quite painful to go back and fix them properly. It’s the same problem as adding constraints to a schema that already has bad data.

Reply
Kristian Nielsen
January 26, 2009 3:18 am

As I understand it, the underlying reason for the silent truncation, and for most of the other ignore-error behaviour, is due to the support for non-transactional storage engines, especially MyISAM which was the first engine and still the default on non-Windows installs I believe.

Since MyISAM cannot roll back a partial change, the issue is what to do when a problem is detected half-way through a multi-row update or insert. Truncating the value (or other error-ignoring action) allows the statement to complete, but leaves possibly wrong data in one row. Aborting would leave half an update in the database, which can also cause serious inconsistencies. Either way we loose.

With InnoDB there is no such problems, as we can rollback just the offending statement on detecting an error. Personally I would install MySQL with InnoDB and strict-mode defauls.

However even an engine like NDB (which is transactional) does not fully support this, as it cannot roll back the last statement (only the whole transaction), which leads to some of the same problems.

Reply
Log Buffer #133: A Carnival of the Vanities for DBAs
January 30, 2009 12:08 pm

[…] colleague Sheeri wrote a great blog post on MySQL’s default silent truncation behavior and how this can affect your database server’s data […]

Reply

Leave a Reply

Your email address will not be published. Required fields are marked *