MySQL Version 3.23 supports tables of the new MyISAM type and
the old ISAM type. You don't have to convert your old tables to
use these with Version 3.23. By default, all new tables will be created with
type MyISAM (unless you start mysqld with the
--default-table-type=isam option). You can convert an ISAM
table to MyISAM format with ALTER TABLE table_name TYPE=MyISAM
or the Perl script mysql_convert_table_format.
Version 3.22 and 3.21 clients will work without any problems with a Version 3.23 server.
The following list tells what you have to watch out for when upgrading to Version 3.23:
tis620 character set must be fixed
with myisamchk -r or REPAIR TABLE.
DROP DATABASE on a symbolically-linked database, both the
link and the original database are deleted. (This didn't happen in 3.22
because configure didn't detect the availability of the
readlink() system call.)
OPTIMIZE TABLE now works only for MyISAM tables.
For other table types, you can use ALTER TABLE to optimise the table.
During OPTIMIZE TABLE, the table is now locked to prevent it from being
used by other threads.
mysql is now by default started with the
option --no-named-commands (-g). This option can be disabled with
--enable-named-commands (-G). This may cause incompatibility problems in
some cases--for example, in SQL scripts that use named commands without a
semicolon. Long format commands still work from the first line.
MONTH()) will now
return 0 for 0000-00-00 dates. (In MySQL 3.22, these functions returned
NULL.)
german character sort order for ISAM
tables, you must repair them with isamchk -r, because we have made
some changes in the sort order.
IF() now depends on both arguments
and not only the first argument.
AUTO_INCREMENT columns should not be used to store negative
numbers. The reason for this is that negative numbers caused problems
when wrapping from -1 to 0. You should not store 0 in AUTO_INCREMENT
columns, either; CHECK TABLE will complain about 0 values because
they may change if you dump and restore the table. AUTO_INCREMENT
for MyISAM tables is now handled at a lower level and is much
faster than before. In addition, for MyISAM tables, old numbers
are no longer reused, even if you delete rows from the table.
CASE, DELAYED, ELSE, END, FULLTEXT,
INNER, RIGHT, THEN, and WHEN are now reserved words.
FLOAT(X) is now a true floating-point type and not a value with a
fixed number of decimals.
DECIMAL(length,dec) type, the
length argument no longer includes a place for the sign or the
decimal point.
TIME string must now be of one of the following formats:
[[[DAYS] [H]H:]MM:]SS[.fraction] or
[[[[[H]H]H]H]MM]SS[.fraction].
LIKE now compares strings using the same character comparison rules
as for the = operator. If you require the old behaviour, you can
compile MySQL with the CXXFLAGS=-DLIKE_CMP_TOUPPER flag.
REGEXP is now case-insensitive if neither of the strings are binary
strings.
MyISAM (`.MYI') tables, you should use
the CHECK TABLE statement or the myisamchk command. For
ISAM (`.ISM') tables, use the isamchk command.
mysqldump files to be compatible between
MySQL Version 3.22 and Version 3.23, you should not use the
--opt or --all option to mysqldump.
DATE_FORMAT() to make sure there is a
`%' before each format character.
(MySQL Version 3.22 and later already allowed this syntax.)
mysql_fetch_fields_direct() is now a function (it used to be a macro) and
it returns a pointer to a MYSQL_FIELD instead of a
MYSQL_FIELD.
mysql_num_fields() can no longer be used on a MYSQL* object (it's
now a function that takes a MYSQL_RES* value as an argument). With a
MYSQL* object, you should now use mysql_field_count() instead.
SELECT DISTINCT ... was
almost always sorted. In Version 3.23, you must use GROUP BY or
ORDER BY to obtain sorted output.
SUM() now returns NULL instead of 0 if
there are no matching rows. This is required by SQL-99.
AND or OR with NULL values will now return
NULL instead of 0. This mostly affects queries that use NOT
on an AND/OR expression as NOT NULL = NULL.
LPAD() and RPAD() now shorten the result string if it's longer
than the length argument.
| Posted by mysql on Wednesday December 18 2002, @5:27pm | [Delete] [Edit] |
A simple script to convert all your tables to
MyISAM format:
<code>
$link = mysql_connect
('localhost', 'user', 'password');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo "Database: ".$row->Database;
$DB = $row->Database;
mysql_select_db($DB);
$tables=mysql_list_tables($DB);
while (list($bla)=mysql_fetch_array($tables))
{
$result = mysql_query("ALTER TABLE $bla
TYPE=MyISAM")or die("Invalid query");
echo "Table ".$bla." is converted to
MyISAM";
}
}
</code>