Si vos bases de données source et de destination utilisent des jeux de caractères dont la sensibilité à la casse est incohérente, vous risquez de subir une perte de données dans la base de données de destination lors d'une migration ou d'une synchronisation de données avec DTS. Cette rubrique explique comment prévenir ce problème.
Symptômes
Les différentes bases de données gèrent la sensibilité à la casse de manière distincte. En cas d'inadéquation entre les bases de données source et de destination sur ce point, il se peut que certaines données soient absentes de la base de destination une fois la migration ou la synchronisation terminée.
Exemple
Cet exemple s'appuie sur une base de données source Oracle et une base de données de destination MySQL pour illustrer comment une divergence de sensibilité à la casse peut entraîner une perte de données.
Les bases de données Oracle et MySQL présentent des comportements par défaut différents concernant la sensibilité à la casse.
Oracle : Par défaut, Oracle respecte la casse. Il est ainsi possible d'insérer dans une colonne dotée d'une clé primaire ou unique des valeurs qui ne diffèrent que par leur casse, telles que « a » et « A ».
MySQL : La sensibilité à la casse dépend du classement (collation). En règle générale, un classement se terminant par « _ci » est insensible à la casse, tandis qu'un classement se terminant par « _cs » y est sensible. Avec un classement « _ci », vous ne pouvez pas insérer dans une colonne dotée d'une clé primaire ou unique des valeurs qui ne diffèrent que par leur casse (par exemple « a » et « A »), car elles sont considérées comme identiques.
Scénario de migration : Vous migrez des données d'une base de données source Oracle vers une base de données de destination MySQL à l'aide de DTS. Dans la configuration de la tâche, vous ne sélectionnez pas l'option Schema Migration. Une fois la migration achevée, vous vérifiez les données présentes dans la base de destination.
| Type de base de données | Jeu de caractères | Description | Données de la base de données |
| Base de données source : Oracle | AL32UTF | Objet de migration : gb.test |
Les données de la base source sont les suivantes : |
Insertion des données : |
|||
| Base de données de destination : MySQL | utf8 Remarque Insensible à la casse par défaut. |
Vous devez créer la structure de table suivante : |
Une fois la migration terminée, les données de la base de destination sont les suivantes : |
Cause
Les bases de données source et de destination utilisent des jeux de caractères dont la sensibilité à la casse est incohérente.
Résolution
Examinez la logique de votre application afin de déterminer s'il est nécessaire de stocker des données qui ne diffèrent que par leur casse, comme « abc » et « Abc ». Si cette exigence n'existe pas, imposez une casse uniforme pour vos données, par exemple en convertissant toutes les chaînes en minuscules avant leur écriture dans la base de données.
Si votre base de données source est sensible à la casse, veillez à configurer la base de destination avec un classement respectant la casse. Par exemple, sous MySQL, choisissez un classement se terminant par
_cs.