MySQL 3.21 is quite old now, and should be avoided if possible. This information is kept here for historical purposes only.
Fixed problem when sending SIGHUP to mysqld; mysqld dumped core when starting from boot on some systems.
Fixed problem with losing a little memory for some connections.
DELETE FROM tbl_name without a WHERE condition is now done the long way when you use LOCK TABLES or if the table is in use, to avoid race conditions.
INSERT INTO TABLE (timestamp_column) VALUES (NULL); didn't set timestamp.
Fixed some possible race conditions when doing many reopen/close on the same tables under heavy load! This can happen if you execute mysqladmin refresh often. This could in some very rare cases corrupt the header of the index file and cause error 126 or 138.
Fixed fatal bug in refresh() when running with the --skip-external-locking option. There was a “very small” time gap after a mysqladmin refresh when a table could be corrupted if one thread updated a table while another thread did mysqladmin refresh and another thread started a new update ont the same table before the first thread had finished. A refresh (or --flush-tables) will now not return until all used tables are closed!
SELECT DISTINCT with a WHERE clause that didn't match any rows returned a row in some contexts (bug only in 3.21.31).
GROUP BY + ORDER BY returned one empty row when no rows where found.
Fixed a bug in the range optimizer that wrote Use_count: Wrong count for ... in the error log file.
Fixed a sign extension problem for the TINYINT type on Irix.
Fixed problem with LEFT("constant_string",function).
Fixed problem with FIND_IN_SET().
LEFT JOIN dumped core if the second table is used with a constant WHERE/ON expression that uniquely identifies one record.
Fixed problems with DATE_FORMAT() and incorrect dates. DATE_FORMAT() now ignores '%' to make it possible to extend it more easily in the future.
mysql now returns an exit code > 0 if the query returned an error.
Saving of command-line history to file in mysql client. By Tommy Larsen mailto:tommy@@mix.hive.no.
Fixed problem with empty lines that were ignored in mysql.cc.
Save the pid of the signal handler thread in the pid file instead of the pid of the main thread.
Added patch by mailto:tommy@@valley.ne.jp to support Japanese characters SJIS and UJIS.
Changed safe_mysqld to redirect startup messages to host_name.err instead of host_name.log to reclaim file space on mysqladmin refresh.
ENUM always had the first entry as default value.
ALTER TABLE wrote two entries to the update log.
sql_acc() now closes the mysql grant tables after a reload to save table space and memory.
Changed LOAD DATA to use less memory with tables and BLOB columns.
Sorting on a function which made a division / 0 produced a wrong set in some cases.
Fixed SELECT problem with LEFT() when using the czech character set.
Fixed problem in isamchk; it couldn't repair a packed table in a very unusual case.
SELECT statements with & or | (bit functions) failed on columns with NULL values.
When comparing a field = field, where one of the fields was a part key, only the length of the part key was compared.
LOCK TABLES + DELETE from tbl_name never removed locks properly.
Fixed problem when grouping on an OR function.
Fixed permission problem with umask() and creating new databases.
Fixed permission problem on result file with SELECT ... INTO OUTFILE ...
Fixed problem in range optimizer (core dump) for a very complex query.
Fixed problem when using MIN(integer) or MAX(integer) in GROUP BY.
Fixed bug on Alpha when using integer keys. (Other keys worked on Alpha.)
Fixed bug in WEEK("XXXX-xx-01").
Fixed socket permission (clients couldn't connect to Unix socket on Linux).
Fixed bug in record caches; for some queries, you could get Error from table handler: # on some operating systems.
Added user level lock functions GET_LOCK(string,timeout), RELEASE_LOCK(string).
Added Opened_tables to show status.
Changed connect timeout to 3 seconds to make it somewhat harder for crackers to kill mysqld through telnet + TCP/IP.
Fixed bug in range optimizer when using WHERE key_part_1 >= something AND key_part_2 <= something_else.
Changed configure for detection of FreeBSD 3.0 9803xx and above
WHERE with string_col_key = constant_string didn't always find all rows if the column had many values differing only with characters of the same sort value (like e and e with an accent).
Strings keys looked up with 'ref' were not compared in case-sensitive fashion.
Added umask() to make log files non-readable for normal users.
Ignore users with old (8-byte) password on startup if not using --old-protocol option to mysqld.
SELECT which matched all key fields returned the values in the case of the matched values, not of the found values. (Minor problem.)
FROM_DAYS(0) now returns "0000-00-00".
In DATE_FORMAT(), PM and AM were swapped for hours 00 and 12.
Extended the default maximum key size to 256.
Fixed bug when using BLOB/TEXT in GROUP BY with many tables.
An ENUM field that is not declared NOT NULL has NULL as the default value. (Previously, the default value was the first enumeration value.)
Fixed bug in the join optimizer code when using many part keys on the same key: INDEX (Organization,Surname(35),Initials(35)).
Added some tests to the table order optimizer to get some cases with SELECT ... FROM many_tables much faster.
Added a retry loop around accept() to possibly fix some problems on some Linux machines.
Changed typedef 'string' to typedef 'my_string' for better portability.
You can now kill threads that are waiting on a disk-full condition.
Fixed some problems with UDF functions.
Added long options to isamchk. Try isamchk --help.
Fixed a bug when using 8 bytes long (alpha); filesort() didn't work. Affects DISTINCT, ORDER BY and GROUP BY on 64-bit processors.
Dynamic loadable functions. Based on source from Alexis Mikhailov.
You couldn't delete from a table if no one had done a SELECT on the table.
Fixed problem with range optimizer with many OR operators on key parts inside each other.
Recoded MIN() and MAX() to work properly with strings and HAVING.
Changed default umask value for new files from 0664 to 0660.
Fixed problem with LEFT JOIN and constant expressions in the ON part.
Added Italian error messages from mailto:brenno@@dewinter.com.
configure now works better on OSF/1 (tested on 4.0D).
Added hooks to allow LIKE optimization with international character support.
Upgraded DBI to 0.93.
The following symbols are now reserved words: TIME, DATE, TIMESTAMP, TEXT, BIT, ENUM, NO, ACTION, CHECK, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, STATUS, VARIABLES.
Setting a TIMESTAMP to NULL in LOAD DATA INFILE ... didn't set the current time for the TIMESTAMP.
Fix BETWEEN to recognize binary strings. Now BETWEEN is case-sensitive.
Added --skip-thread-priority option to mysqld, for systems where mysqld thread scheduling doesn't work properly (BSDI 3.1).
Added ODBC functions DAYNAME() and MONTHNAME().
Added function TIME_FORMAT(). This works like DATE_FORMAT(), but takes a time string ('HH:MM:SS') as argument.
Fixed unlikely(?) key optimizer bug when using OR operators of key parts inside AND expressions.
Added variables command to mysqladmin.
A lot of small changes to the binary releases.
Fixed a bug in the new protocol from MySQL 3.21.20.
Changed ALTER TABLE to work with Windows (Windows can't rename open files). Also fixed a couple of small bugs in the Windows version.
All standard MySQL clients are now ported to MySQL for Windows.
MySQL can now be started as a service on NT.
Starting with this version, all MySQL distributions will be configured, compiled and tested with crash-me and the benchmarks on the following platforms: SunOS 5.6 sun4u, SunOS 5.5.1 sun4u, SunOS 4.14 sun4c, SunOS 5.6 i86pc, Irix 6.3 mips5k, HP-UX 10.20 hppa, AIX 4.2.1 ppc, OSF/1 V4.0 alpha, FreeBSD 2.2.2 i86pc and BSDI 3.1 i386.
Fix COUNT(*) problems when the WHERE clause didn't match any records. (Bug from 3.21.17.)
Removed that NULL = NULL is true. Now you must use IS NULL or IS NOT NULL to test whether a value is NULL. (This is according to standard SQL but may break old applications that are ported from mSQL.) You can get the old behavior by compiling with -DmSQL_COMPLIANT.
Fixed bug that caused core-dump when using many LEFT OUTER JOIN clauses.
Fixed bug in ORDER BY on string formula with possible NULL values.
Fixed problem in range optimizer when using <= on sub index.
Added functions DAYOFYEAR(), DAYOFMONTH(), MONTH(), YEAR(), WEEK(), QUARTER(), HOUR(), MINUTE(), SECOND() and FIND_IN_SET().
Added SHOW VARIABLES command.
Added support of “long constant strings” from standard SQL:
mysql> SELECT 'first ' 'second'; -> 'first second'
Upgraded Msql-Mysql-modules to 1.1825.
Upgraded mysqlaccess to 2.02.
Fixed problem with Russian character set and LIKE.
Ported to OpenBSD 2.1.
New Dutch error messages.
Fixed optimizer bug when using WHERE data_field = date_field2 AND date_field2 = constant.
Added SHOW STATUS command.
Removed manual.ps from the source distribution to make it smaller.
Changed the maximum table name and column name lengths from 32 to 64.
Aliases can now be of “any” length.
Fixed mysqladmin stat to return the right number of queries.
Changed protocol (downward compatible) to mark if a column has the AUTO_INCREMENT attribute or is a TIMESTAMP. This is needed for the new Java driver.
Added Hebrew sorting order by Zeev Suraski.
Solaris 2.6: Fixed configure bugs and increased maximum table size from 2GB to 4GB.
Upgraded DBD to 1.1823. This version implements mysql_use_result in DBD-Mysql.
Benchmarks updated for empress (by Luuk).
Fixed a case of slow range searching.
Configure fixes (Docs directory).
Added function REVERSE() (by Zeev Suraski).
Issue error message if client C functions are called in wrong order.
Added automatic reconnect to the libmysql.c library. If a write command fails, an automatic reconnect is done.
Small sort sets no longer use temporary files.
Upgraded DBI to 0.91.
Fixed a couple of problems with LEFT OUTER JOIN.
Added CROSS JOIN syntax. CROSS is now a reserved word.
Recoded yacc/bison stack allocation to be even safer and to allow MySQL to handle even bigger expressions.
Fixed a couple of problems with the update log.
ORDER BY was slow when used with key ranges.
Changed documentation string of --with-unix-socket-path to avoid confusion.
Added ODBC and standard SQL style LEFT OUTER JOIN.
The following are new reserved words: LEFT, NATURAL, USING.
The client library now uses the value of the environment variable MYSQL_HOST as the default host if it's defined.
SELECT col_name, SUM(expr) now returns NULL for col_name when there are matching rows.
Fixed problem with comparing binary strings and BLOB values with ASCII characters over 127.
Fixed lock problem: when freeing a read lock on a table with multiple read locks, a thread waiting for a write lock would have been given the lock. This shouldn't affect data integrity, but could possibly make mysqld restart if one thread was reading data that another thread modified.
LIMIT offset,count didn't work in INSERT ... SELECT.
Optimized key block caching. This will be quicker than the old algorithm when using bigger key caches.
Added ODBC 2.0 & 3.0 functions POWER(), SPACE(), COT(), DEGREES(), RADIANS(), ROUND(2 arg) and TRUNCATE().
Warning: Incompatible change! LOCATE() parameters were swapped according to ODBC standard. Fixed.
Added function TIME_TO_SEC().
In some cases, default values were not used for NOT NULL fields.
Timestamp wasn't always updated properly in UPDATE SET ... statements.
Allow empty strings as default values for BLOB and TEXT, to be compatible with mysqldump.
Warning: Incompatible change! mysqlperl is now from Msql-Mysql-modules. This means that connect() now takes host, database, user, password arguments! The old version took host, database, password, user.
Allow DATE '1997-01-01', TIME '12:10:10' and TIMESTAMP '1997-01-01 12:10:10' formats required by standard SQL. Warning: Incompatible change! This has the unfortunate side effect that you no longer can have columns named DATE, TIME or TIMESTAMP. :( Old columns can still be accessed through tbl_name.col_name!)
Changed Makefiles to hopefully work better with BSD systems. Also, manual.dvi is now included in the distribution to avoid having stupid make programs trying to rebuild it.
readline library upgraded to version 2.1.
A new sortorder german-1. That is a normal ISO-Latin1 with a german sort order.
Perl DBI/DBD is now included in the distribution. DBI is now the recommended way to connect to MySQL from Perl.
New portable benchmark suite with DBD, with test results from mSQL 2.0.3, MySQL, PostgreSQL 6.2.1 and Solid server 2.2.
crash-me is now included with the benchmarks; this is a Perl program designed to find as many limits as possible in an SQL server. Tested with mSQL, PostgreSQL, Solid and MySQL.
Fixed bug in range-optimizer that crashed MySQL on some queries.
Table and column name completion for mysql command-line tool, by Zeev Suraski and Andi Gutmans.
Added new command REPLACE that works like INSERT but replaces conflicting records with the new record. REPLACE INTO TABLE ... SELECT ... works also.
Added new commands CREATE DATABASE db_name and DROP DATABASE db_name.
Added RENAME option to ALTER TABLE: ALTER TABLE name RENAME TO new_name.
make_binary_distribution now includes libgcc.a in libmysqlclient.a. This should make linking work for people who don't have gcc.
Changed net_write() to my_net_write() because of a name conflict with Sybase.
Stack checking and bison memory overrun checking to make MySQL safer with weird queries.
Ported to SCO Openserver 5.0.4 with FSU Pthreads.
HP-UX 10.20 should work.
Added new function DATE_FORMAT().
Added NOT IN.
Added automatic removal of 'ODBC function conversions': {fn now() }
Handle ODBC 2.50.3 option flags.
Fixed comparison of DATE and TIME values with NULL.
Changed language name from germany to german to be consistent with the other language names.
Fixed sorting problem on functions returning a FLOAT. Previously, the values were converted to INT values before sorting.
Fixed slow sorting when sorting on key field when using key_col=constant.
Sorting on calculated DOUBLE values sorted on integer results instead.
mysql no longer requires a database argument.
Changed the place where HAVING should be. According to the SQL standards, it should be after GROUP BY but before ORDER BY. MySQL 3.20 incorrectly had it last.
Added Sybase command USE database to start using another database.
Added automatic adjusting of number of connections and table cache size if the maximum number of files that can be opened is less than needed. This should fix that mysqld doesn't crash even if you haven't done a ulimit -n 256 before starting mysqld.
Added lots of limit checks to make it safer when running with too little memory or when doing weird queries.
Added retry of interrupted reads and clearing of errno. This makes Linux systems much safer!
Fixed locking bug when using many aliases on the same table in the same SELECT.
Fixed bug with LIKE on number key.
New error message so you can check whether the connection was lost while the command was running or whether the connection was down from the start.
Added --table option to mysql to print in table format. Moved time and row information after query result. Added automatic reconnect of lost connections.
Added != as a synonym for <>.
Added function VERSION() to make easier logs.
New multi-user test tests/fork_test.pl to put some strain on the thread library.
Fixed ftruncate() call in MIT-pthreads. This made isamchk destroy the .ISM files on (Free)BSD 2.x systems.
Fixed broken __P_ patch in MIT-pthreads.
Many memory overrun checks. All string functions now return NULL if the returned string should be longer than max_allowed_packet bytes.
Changed the name of the INTERVAL type to ENUM, because INTERVAL is used in standard SQL.
In some cases, doing a JOIN + GROUP + INTO OUTFILE, the result wasn't grouped.
LIKE with '_' as last character didn't work. Fixed.
Added extended standard SQL TRIM() function.
Added CURTIME().
Added ENCRYPT() function by Zeev Suraski.
Fixed better FOREIGN KEY syntax skipping. New reserved words: MATCH, FULL, PARTIAL.
mysqld now allows IP number and hostname for the --bind-address option.
Added SET CHARACTER SET cp1251_koi8 to enable conversions of data to and from the cp1251_koi8 character set.
Lots of changes for Windows 95 port. In theory, this version should now be easily portable to Windows 95.
Changed the CREATE COLUMN syntax of NOT NULL columns to be after the DEFAULT value, as specified in the standard SQL standard. This will make mysqldump with NOT NULL and default values incompatible with MySQL 3.20.
Added many function name aliases so the functions can be used with ODBC or standard SQL syntax.
Fixed syntax of ALTER TABLE tbl_name ALTER COLUMN col_name SET DEFAULT NULL.
Added CHAR and BIT as synonyms for CHAR(1).
Fixed core dump when updating as a user who has only SELECT privilege.
INSERT ... SELECT ... GROUP BY didn't work in some cases. An Invalid use of group function error occurred.
When using LIMIT, SELECT now always uses keys instead of record scan. This will give better performance on SELECT and a WHERE that matches many rows.
Added Russian error messages.
Configure changes.
MySQL now works with the new thread library on BSD/OS 3.0.
Added new group functions BIT_OR() and BIT_AND().
Added compatibility functions CHECK and REFERENCES. CHECK is now a reserved word.
Added ALL option to GRANT for better compatibility. (GRANT is still a dummy function.)
Added partly translated Dutch error messages.
Fixed bug in ORDER BY and GROUP BY with NULL columns.
Added function LAST_INSERT_ID() SQL function to retrieve last AUTO_INCREMENT value. This is intended for clients to ODBC that can't use the mysql_insert_id() API function, but can be used by any client.
Added --flush-logs option to mysqladmin.
Added command STATUS to mysql.
Fixed problem with ORDER BY/GROUP BY because of bug in gcc.
Fixed problem with INSERT ... SELECT ... GROUP BY.
New program mysqlaccess.
CREATE now supports all ODBC types and the mSQL TEXT type. All ODBC 2.5 functions are also supported (added REPEAT). This provides better portability.
Added text types TINYTEXT, TEXT, MEDIUMTEXT and LONGTEXT. These are actually BLOB types, but all searching is done in case-insensitive fashion.
All old BLOB fields are now TEXT fields. This only changes that all searching on strings is done in case-sensitive fashion. You must do an ALTER TABLE and change the data type to BLOB if you want to have tests done in case-sensitive fashion.
Fixed some configure issues.
Made the locking code a bit safer. Fixed very unlikely deadlock situation.
Fixed a couple of bugs in the range optimizer. Now the new range benchmark test-select works.
Added --enable-unix-socket=pathname option to configure.
Fixed a couple of portability problems with include files.
Fixed bug in range calculation that could return empty set when searching on multiple key with only one entry (very rare).
Most things ported to FSU Pthreads, which should allow MySQL to run on SCO. See the section called “SCO Notes”.
Works now in Solaris 2.6.
Added handling of calculation of SUM() functions. For example, you can now use SUM(column)/COUNT(column).
Added handling of trigometric functions: PI(), ACOS(), ASIN(), ATAN(), COS(), SIN() and TAN().
New languages: Norwegian, Norwegian-ny and Portuguese.
Fixed parameter bug in net_print() in procedure.cc.
Fixed a couple of memory leaks.
Now allow also the old SELECT ... INTO OUTFILE syntax.
Fixed bug with GROUP BY and SELECT on key with many values.
mysql_fetch_lengths() sometimes returned incorrect lengths when you used mysql_use_result(). This affected at least some cases of mysqldump --quick.
Fixed bug in optimization of WHERE const op field.
Fixed problem when sorting on NULL fields.
Fixed a couple of 64-bit (Alpha) problems.
Added --pid-file=# option to mysqld.
Added date formatting to FROM_UNIXTIME(), originally by Zeev Suraski.
Fixed bug in BETWEEN in range optimizer (did only test = of the first argument).
Added machine-dependent files for MIT-pthreads i386-SCO. There is probably more to do to get this to work on SCO 3.5.
Changed Makefile.am to take advantage of Automake 1.2.
Added the beginnings of a benchmark suite.
Added more secure password handling.
Added new client function mysql_errno(), to get the error number of the error message. This makes error checking in the client much easier. This makes the new server incompatible with the 3.20.x server when running without --old-protocol. The client code is backward-compatible. More information can be found in the README file!
Fixed some problems when using very long, illegal names.
Fixed more portability issues (incorrect sigwait and sigset defines).
configure should now be able to detect the last argument to accept().
Should now work with FreeBSD 3.0 if used with FreeBSD-3.0-libc_r-1.0.diff, which can be found at http://dev.mysql.com/downloads/os-freebsd.html.
Added new -O tmp_table_size=# option to mysqld.
New function FROM_UNIXTIME(timestamp) which returns a date string in 'YYYY-MM-DD HH:MM:SS' format.
New function SEC_TO_TIME(seconds) which returns a string in 'HH:MM:SS' format.
New function SUBSTRING_INDEX(), originally by Zeev Suraski.
Should now configure and compile on OSF/1 4.0 with the DEC compiler.
Configuration and compilation on BSD/OS 3.0 works, but due to some bugs in BSD/OS 3.0, mysqld doesn't work on it yet.
Configuration and compilation on FreeBSD 3.0 works, but I couldn't get pthread_create to work.
Added reverse check lookup of hostnames to get better security.
Fixed some possible buffer overflows if filenames that are too long are used.
mysqld doesn't accept hostnames that start with digits followed by a '.', because the hostname may look like an IP number.
Added --skip-networking option to mysqld, to allow only socket connections. (This will not work with MIT-pthreads!)
Added check of too long table names for alias.
Added check whether database name is okay.
Added check whether too long table names.
Removed incorrect free() that killed the server on CREATE DATABASE or DROP DATABASE.
Changed some mysqld -O options to better names.
Added -O join_cache_size=# option to mysqld.
Added -O max_join_size=# option to mysqld, to be able to set a limit how big queries (in this case big = slow) one should be able to handle without specifying SET SQL_BIG_SELECTS=1. A # = is about 10 examined records. The default is “unlimited.”
When comparing a TIME, DATE, DATETIME or TIMESTAMP column to a constant, the constant is converted to a time value before performing the comparison. This will make it easier to get ODBC (particularly Access97) to work with these types. It should also make dates easier to use and the comparisons should be quicker than before.
Applied patch from Jochen Wiedmann that allows query() in mysqlperl to take a query with \0 in it.
Storing a timestamp with a two-digit year (YYMMDD) didn't work.
Fix that timestamp wasn't automatically updated if set in an UPDATE clause.
Now the automatic timestamp field is the FIRST timestamp field.
SELECT * INTO OUTFILE, which didn't correctly if the outfile already existed.
mysql now shows the thread ID when starting or doing a reconnect.
Changed the default sort buffer size from 2MB to 1MB.
The range optimizer is coded, but only 85% tested. It can be enabled with --new, but it crashes core a lot yet...
More portable. Should compile on AIX and alpha-digital. At least the isam library should be relatively 64-bit clean.
New isamchk which can detect and fix more problems.
New options for isamlog.
Using new version of Automake.
Many small portability changes (from the AIX and alpha-digital port) Better checking of pthread(s) library.
czech error messages by mailto:snajdr@@pvt.net.
Decreased size of some buffers to get fewer problems on systems with little memory. Also added more checks to handle “out of memory” problems.
mysqladmin: you can now do mysqladmin kill 5,6,7,8 to kill multiple threads.
When the maximum connection limit is reached, one extra connection by a user with the process_acl privilege is granted.
Added -O backlog=# option to mysqld.
Increased maximum packet size from 512KB to 1024KB for client.
Almost all of the function code is now tested in the internal test suite.
ALTER TABLE now returns warnings from field conversions.
Port changed to 3306 (got it reserved from ISI).
Added a fix for Visual FoxBase so that any schema name from a table specification is automatically removed.
New function ASCII().
Removed function BETWEEN(a,b,c). Use the standard SQL syntax instead: expr BETWEEN expr AND expr.
MySQL no longer has to use an extra temporary table when sorting on functions or SUM() functions.
Fixed bug that you couldn't use tbl_name.field_name in UPDATE.
Fixed SELECT DISTINCT when using 'hidden group'. For example:
mysql> SELECT DISTINCT MOD(some_field,10) FROM test -> GROUP BY some_field;
Note: some_field is normally in the SELECT part. Standard SQL should require it.
New reserved words used: INTERVAL, EXPLAIN, READ, WRITE, BINARY.
Added ODBC function CHAR(num,...).
New operator IN. This uses a binary search to find a match.
New command LOCK TABLES tbl_name [AS alias] {READ|WRITE} ...
Added --log-update option to mysqld, to get a log suitable for incremental updates.
New command EXPLAIN SELECT ... to get information about how the optimizer will do the join.
For easier client code, the client should no longer use FIELD_TYPE_TINY_BLOB, FIELD_TYPE_MEDIUM_BLOB, FIELD_TYPE_LONG_BLOB or FIELD_TYPE_VAR_STRING (as previously returned by mysql_list_fields). You should instead use only FIELD_TYPE_BLOB or FIELD_TYPE_STRING. If you want exact types, you should use the command SHOW FIELDS.
Added varbinary syntax: 0x###### which can be used as a string (default) or a number.
FIELD_TYPE_CHAR is renamed to FIELD_TYPE_TINY.
Changed all fields to C++ classes.
Removed FORM struct.
Fields with DEFAULT values no longer need to be NOT NULL.
New field types:
A string which can take only a couple of defined values. The value is stored as a 1-3 byte number that is mapped automatically to a string. This is sorted according to string positions!
A string which may have one or many string values separated by ','. The string is stored as a 1-, 2-, 3-, 4- or 8-byte number where each bit stands for a specific set member. This is sorted according to the unsigned value of the stored packed number.
Now all function calculation is done with double or long long. This will provide the full 64-bit range with bit functions and fix some conversions that previously could result in precision losses. One should avoid using unsigned long long columns with full 64-bit range (numbers bigger than 9223372036854775807) because calculations are done with signed long long.
ORDER BY will now put NULL field values first. GROUP BY will also work with NULL values.
Full WHERE with expressions.
New range optimizer that can resolve ranges when some keypart prefix is constant. Example:
mysql> SELECT * FROM tbl_name -> WHERE key_part_1='customer' -> AND key_part_2>=10 AND key_part_2<=10;