2011-03-12 1 views
1

J'utilise le type de données Enum comme clé primaire référencée comme clé étrangère dans une autre table. Si je dois ajouter un élément supplémentaire à cette valeur enum, j'utiliseForcer le type MySQL ENUM à utiliser 2 octets depuis le début

ALTER TABLE <table> MODIFY <colName> ENUM(<OLD VALUES>, NEW VAL); 

sur les deux tables. Ça fonctionne bien.

J'ai eu un exemple obscur dans lequel j'ai fini par aller de < 255 valeurs à plus. Dans ce cas, ENUM devra passer du stockage de 1 octet au stockage de 2 octets. C'est quand ça échoue. Me donner

erreur 1025 (HY000): Erreur sur renommage de './TXCAD/#sql-5912_86' à' ./TXCAD/EN_TABLE »(errno: 150)

Je l'ai fait une des recherches et découvert que cette conversion de 1 octet à deux octets dans la table principale rend la différence de type de données de clé étrangère. Existe-t-il un moyen de forcer MySql à utiliser 2 octets depuis le début même si ENUM() a moins de 255 valeurs lors de la création de la table? ?

En utilisant MySql - 5.1 tables InnoDB

Répondre

1

Juste pour que vous le savez, je cherchais sur cela pour un peu. De la docs, il apparaît vraiment que la seule façon d'obtenir un enum de 2 octets au moment de la création de la table est la façon dont vous l'avez mentionné ... c'est-à-dire, spécifiez plus de 255 éléments dans votre liste enum. Je ne vois pas une autre partie de la table créer une syntaxe qui le permet. Votre seul autre espoir serait qu'il existe un paramètre de fichier de configuration qui permet un autre défaut.

Une liste des variables système du serveur existe, mais j'ai effectué une recherche rapide et je n'ai pas vu de référence à une variable susceptible de modifier le comportement par défaut de la taille du champ enum. http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html (note, cette page est très grand, et accroché mon navigateur momentanément.)

Je pensais juste que vous voulez savoir que quelqu'un d'autre a examiné la question et a décidé d'étudier plus avant, au lieu d'écouter les grillons ...

+0

Merci de votre recherche. J'ai vérifié la page aussi, rien. Ne semble pas être un moyen simple de forcer sa taille. C'est un type de données vraiment puissant, mais sous-utilisé par MySQL. – Jai

+0

Impossible de trouver un moyen pour cela. Ne croyez pas theres une solution normale à cela. – Jai

Questions connexes