Anders posted a blog post about adding a new JSON
data type to MariaDB. This made me remember my very first MySQL
User conference, well, that and the next couple conferences
actually. Why? Because at every conference (for awhile) I
remember Brian Aker getting everybody into a room to discuss how
to add a data type to MySQL. It was considered pretty much the
quintessential example of how to start developing for MySQL
because it touches a lot of the basic guts of the server.
The example that Brian always gave was a "hex" data type, so that
you can store MD5 numbers using 128 bits of storage instead of
256. A human readable MD5 is a 256 bit string (32 characters)
representing 128 bits of actual data. So storing MD5 values in
the database (a very common thing) requires twice as much space
as it should.
Now, …
What’s the difference between INT(2) and INT(20) ? Not a lot. It’s about output formatting, which you’ll never encounter when talking with the server through an API (like you do from most app languages).
The confusion stems from the fact that with CHAR(n) and VARCHAR(n), the (n) signifies the length or maximum length of that field. But for INT, the range and storage size is specified using different data types: TINYINT, SMALLINT, MEDIUMINT, INT (aka INTEGER), BIGINT.
At Open Query we tend to pick on things like INT(2) when reviewing a client’s schema, because chances are that the developers/DBAs are working under a mistaken assumption and this could cause trouble somewhere – even if not in the exact spot where we pick on it. So it’s a case of pattern recognition.
A very practical example of this comes from a client I worked with last week. I first spotted some harmless ones, we talked about it, and then we hit …
[Read more]In short, it really doesn’t matter. After watching a MySQL web conference by Jay Pipes, I was gutted when I found out that they are actually exactly the same. I know im not alone in thinking that it affected the size of the data field. An unsigned int has the max value of 4294967295 no matter if its INT(1) or int(10) and will use 4 bytes of data.
So, what does the number in the brackets mean? It pretty much comes down to display, its called the display-width. The display width is a number from 1 to 255. You can set the display width if you want all of your integer values to “appear”. If you enable zerofill on the row, the field will have a default value of 0 for int(1) and 0000000000 for int(10).
There are 5 main numeric data types, and you should …
[Read more]Want to know the type of an arbitrary expression in MySQL? Someday in the far far future in version 7.1, you might be able to with the TYPEOF() function.
For now you can try this:
CREATE TEMPORARY TABLE typeof AS SELECT [expression] AS col;
For example, let’s see what the type of CRC32 is.
mysql> CREATE TEMPORARY TABLE typeof AS SELECT CRC32('hello world') AS col; mysql> DESCRIBE typeof; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | col | int(10) unsigned | NO | | 0 | | +-------+------------------+------+-----+---------+-------+
This is one possible way to programmatically determine the type of an expression — even an arbitrarily complex one.
Not beautiful, but …
[Read more]
Here is the video of “Database Basics”, which I presented at the
February 2008 Boston MySQL User Group meeting. The presentation
goes over the basics of relations, data, the Entity-Relationship
Model, how to choose data types, and how to do basic
CREATE
statements.
You can download:
the video (Large, 500 MB, or Small, 100 MB)
and
the slides (PDF, 171 Kb).
Or just watch the video: