Comment le changement du type de champ mysql de INT à VARCHAR affectera-t-il les données précédemment stockées en tant que INT?

Je dois mettre à jour un champ dans ma firebase database de production de INT à VARCHAR.

L’information dans le champ INT actuel est sensible et je veux m’assurer que je ne le modifie pas par inadvertance ou que je ne le détruis pas en changeant le type de table. Par exemple, un utilisateur peut avoir INT 123456 stocké dans cette colonne et je veux m’assurer qu’il est stocké avec précision une fois converti en VARCHAR.

Quel est le processus recommandé pour accomplir cela?

Y a-t-il quelque chose dont je dois m’inquiéter en utilisant quelque chose comme ça?

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR; 

Merci d’avance pour votre aide.

Mettez votre serveur MySQL en mode ssortingct avant de changer le type de colonne et assurez-vous que votre colonne varchar(n) a un n assez grand pour contenir tous les entiers quand ils sont convertis en chaînes. Si vous n’êtes pas en mode ssortingct, MySQL tronquera silencieusement vos données pour les adapter à la taille de votre chaîne :

Si le mode SQL ssortingct n’est pas activé et que vous affectez une valeur à une colonne CHAR ou VARCHAR qui dépasse la longueur maximale de la colonne, la valeur est tronquée et un avertissement est généré. Pour la troncature des caractères non spatiaux, vous pouvez provoquer une erreur (plutôt qu’un avertissement) et supprimer l’insertion de la valeur en utilisant le mode SQL ssortingct.

Mais si vous entrez en mode ssortingct en premier:

 mysql> set sql_mode = 'STRICT_ALL_TABLES'; mysql> alter table table_sample change col_sample col_sample varchar(6); 

Vous obtiendrez un joli message d’erreur comme celui-ci:

 ERROR 1406 (22001): Data too long for column 'col_sample' at row ... 

si vos entiers ne rentrent pas tous dans votre varchar .

Et, bien sûr, vous aurez une nouvelle sauvegarde vérifiée de votre firebase database avant d’essayer de changer la table. Et en vérifiant, je veux dire que vous avez restauré votre sauvegarde avec succès dans une firebase database de test.