Comment créer une colonne de type tinyint(2) ou de type tinyint(3) en Ruby on Rails?
En Ruby on Rails, le code suivant dans une migration crée une colonne de type tinyint(4)
dans MySQL:
create_table :great_table do |t|
t.integer :step_position, :limit => 1 #tinyint
end
Comment pourrais-je créer une colonne de type tinyint(2)
ou tinyint(3)
?
J'aimerais vous déconseillons d'utiliser
tinyint
en premier lieu. C'est trop spécifique. Je me risquerais à deviner que c'est en fait MOINS performantes qu'en utilisant un simple champ de type entier, aussi bien. Il pourrait vous faire économiser une quantité négligeable de l'espace par l'enregistrement, mais je ne suis même pas sûr que ce soit le cas. Je pense que vous auriez du mal à me convaincre qu'il y avait une raison à jamais l'utiliser.OriginalL'auteur maxedison | 2014-01-30
Vous devez vous connecter pour publier un commentaire.
Pour tinyint(2)
Pour tinyint(3)
OriginalL'auteur srbhattarai
Il n'y a pas une telle chose comme
tinyint(4)
dans MySQL en premier lieu.tinyint
est un octet entier signé. Vous pouvez vérifier tous les types d'entiers dans le docs. Vous pouvez voir quelque chose commetinyint(1)
même dans les Rails le code source, mais je pense que c'est une tautologie quetinyint
implique déjà un octet de stockage.Les Rails de chemin de déclarer
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
dans une migration est en utilisantlimit:
avec la taille en octets comme on peut le voir dans le le code source.Méfiez-vous que les Rails de traiter d'un octet entiers comme des booléens par défaut, comme on peut le voir à partir du lien ci-dessus.
OriginalL'auteur petkov.np
Selon ce que je vois dans le code source de la gemme, vous ne pouvez pas:
type_to_sql
:tinyint
type. Cet extrait de code est où Rails décide d'ignorer votre:integer
spécification du type et de l'utilisation d'un autre type pour représenter la taille de valeurs entières lorsque les deux:integer
et:limit
sont spécifiés.Peur d'avoir tort, type_to_sql est appelé à partir de add_column. Vous pouvez voir que dans le code: api.rubyonrails.org/v2.3.8/classes/ActiveRecord/...
Je pense que j'ai peut-être mal à propos qu'il y ait un soutien pour un type tinyint en premier lieu (autres que de manière indirecte en raison d'un nombre entier et la limite de combo). Le code ci-dessus est certainement appliqué lorsque le type est entier.
OriginalL'auteur FedeX
Vous pouvez utiliser
:tinyint
que le type de colonne dans un rails de la migration, et d'écrirelimit: 2
oulimit: 3
comme l'a écrit avant.À l'aide de votre exemple:
devrait fonctionner.
OriginalL'auteur adiszekely