Les clients des versions 3.22 et 3.21 vont fonctionner sans problèmes avec la version 3.23 du serveur.
La liste suivante indique les points à vérifier lors de la migration :
Changement de tables :
MySQL 3.23 supporte les nouvelles tables
MyISAM
et l'ancien type
ISAM
. Par défaut, toutes les nouvelles
tables sont créées avec MyISAM
à moins
que vous ne lanciez mysqld
avec l'option
--default-table-type=isam
. Vous n'avez pas
à convertir les anciennes tables ISAM
pour les utiliser avec MySQL 3.23. Vous pouvez les convertir
les tables ISAM
en
MyISAM
avec la commande ALTER
TABLE tbl_name TYPE=MyISAM
et le script Perl
mysql_convert_table_format
.
Toutes les tables qui utilisent le jeu de caractères
tis620
doivent être corrigées avec
myisamchk -r
ou REPAIR
TABLE
.
Si vous utilisez le jeu de caractères
allemand
pour les tris, vous devez
réparer vos tables avec isamchk -r
, car
nous avons fait des modifications dans l'ordre de tri.
Changement au programme client :
Le client MySQL mysql
est démarré par
défaut avec l'option option --no-named-commands
(-g)
. Cette option peut être désactivée avec
--enable-named-commands (-G)
. Cela peut
causer des problèmes d'incompatibilité dans certains cas
: par exemple, dans les scripts SQL qui utilisent des
commandes nommées sans point virgule! Le format long de la
commande devrait fonctionner correctement.
Si vous voulez que les fichiers d'export de
mysqldump
soient compatibles entre les
versions MySQL 3.22 et 3.23, vous ne devez pas utiliser
l'option --opt
ou --all
de
mysqldump
.
Changements SQL :
Si vous exécutez une commande DROP
DATABASE
sur un lien symbolique, le lien et la
base originale seront effacés. Cela n'arrivait pas en 3.22
car configure
ne détectait pas les
appels à readlink
.
OPTIMIZE TABLE
ne fonctionne que pour les
tables MyISAM
. Pour les autres types de
tables, vous devez utiliser ALTER TABLE
pour optimiser la table. Durant la commande
OPTIMIZE TABLE
, la table est
verrouillée.
Les fonctions de date qui travaillent sur des parties de
date (comme MONTH()
) vont désormais
retourner 0 pour la date 0000-00-00
.
(MySQL 3.22 retournait NULL
.)
Le type de retour par défaut de IF()
dépendant maintenant des deux arguments, et plus seulement
du premier.
AUTO_INCREMENT
ne fonctionne pas sur les
nombres négatifs. La raison pour cela est que les nombres
négatifs posaient des problèmes d'écrasement entre -1 et
0. AUTO_INCREMENT
pour les tables
MyISAM
est maintenant géré à un niveau
plus bas, et il est bien plus rapide. Pour les tables
MyISAM
, les anciens numéros ne sont plus
réutilisés, même si vous effacez des lignes dans la
table.
CASE
, DELAYED
,
ELSE
, END
,
FULLTEXT
, INNER
,
RIGHT
, THEN
et
WHEN
sont de nouveaux mots réservés.
FLOAT(p)
est maintenant un véritable
type de nombre à virgule flottante, avec un nombre défini
de décimales.
Lors de la déclaration de
DECIMAL(length,dec)
, la taille de
l'argument n'inclut plus une place pour le signe ou le
séparateur décimal.
Une chaîne TIME
doit être fournie au
format suivant : [[[DAYS]
[H]H:]MM:]SS[.fraction]
ou
[[[[[H]H]H]H]MM]SS[.fraction]
.
LIKE
compare maintenant les chaînes en
appliquant les mêmes règles que =
. Si
vous voulez l'ancien comportement, vous pouvez compiler
MySQL avec l'option
CXXFLAGS=-DLIKE_CMP_TOUPPER
.
REGEXP
est maintenant insensible à la
casse pour les chaînes normales (non binaires).
Quand vous vérifiez/réparez des tables, vous devez
utiliser CHECK TABLE
ou
myisamchk
pour les tables
MyISAM
(.MYI
) et
isamchk
pour les tables
ISAM
(.ISM
).
Vérifiez tous vos appels à
DATE_FORMAT()
pour vous assurer qu'il y a
un signe pourcentage ‘%
’
avant chaque caractère de format (MySQL version 3.22 et
plus récent avait déjà cette syntaxe, mais désormais
‘%
’ est obligatoire).
En MySQL version 3.22, le résultat de SELECT
DISTINCT ...
était toujours trié. En version
3.23, vous devez spécifier la clause GROUP
BY
ou ORDER BY
pour obtenir un
résultat trié.
SUM()
retourne désormais
NULL
, au lieu de 0, si il n'y a pas de
lignes à calculer. Ceci s'accorde avec la norme SQL.
AND
ou OR
avec les
valeurs NULL
vont désormais retourner
NULL
au lieu de 0. Cela affecte surtout
les requêtes qui utilisait NOT
ou une
expression AND/OR
telle que NOT
NULL
= NULL
.
LPAD()
et RPAD()
vont
réduire la taille de la chaîne résultante, si elle est
plus grand que l'argument de taille.
Changement de l'interface C :
mysql_fetch_fields_direct
est maintenant
une fonction (c'était une macro), qui retourne un pointeur
sur MYSQL_FIELD
au lieu de
MYSQL_FIELD
.
mysql_num_fields()
ne peut plus être
utilisé sur les objets MYSQL*
(c'est
maintenant une fonction qui prend
MYSQL_RES*
comme argument. Il faut donc
utiliser mysql_field_count()
à la
place).
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.