2010-08-26 4 views
2

Souvent, lors de la création d'une nouvelle application Web et de la configuration de MySQL, certains champs doivent changer de format au fur et à mesure du développement de l'application. Par exemple, je peux changer le format d'un champ de date ou d'un champ qui était autrefois juste int besoin maintenant d'une lettre ou quoi que ce soit. Donc, d'habitude, je fais juste tous les champs Varchar 255 jusqu'à ce que je finisse à quel moment je change les types de données pour les corriger. Donc, ma question est, quelle est l'importance des types de données? Quel est le but? La vitesse?Objet du type de données MySQL

+0

vous êtes question pourrait appliquer aux types de données en général (pas spécifique aux bases de données) car leur but principal est de déterminer les exigences de stockage et les opérations autorisées. http://en.wikipedia.org/wiki/Datatype – webbiedave

Répondre

6

Les types de données sont extrêmement important - sans eux, il n'y a aucun moyen d'être sûr quelles données sont réellement stockées dans la colonne. Par exemple, un VARCHAR (255) peut être n'importe quoi - chaîne, numérique, date/heure ... Il est extrêmement difficile de trouver des données particulières si vous ne pouvez pas garantir ce que sont les données ou n'importe quelle forme sur la cohérence.

Ce qui signifie que la saisie des données fournit également la validation de base - ne peut pas coller des lettres dans une colonne avec un type de données numérique ou date/heure ...

La vitesse de récupération des données est également améliorée par l'utilisation des index sur une colonne, mais un index ne peut pas être utilisé si vous devez changer le type de données des données en quelque chose d'autre avant que les données puissent être comparées.

C'est une bonne chose de réaliser quelle est la différence entre les données et la présentation. Comme dans le cas de la mise en forme du champ de date - c'est la présentation, qui peut être facilement prise en compte si le type de données est DATETIME (ou converti en DATETIME).

+0

Les gars et les filles de sqlite sont en désaccord avec vous sur l'importance intrinsèque du typage statique et fort dans les bases de données, voir par ex. http://www.sqlite.org/different.html "Manifeste dactylographier" ;-) – VolkerK

+0

@VolkerK: Oui, j'ai vu quelques questions de SQLite ici ressemblant à "SQLite le stocke comme texte, ainsi comment je reçois la fonctionnalité de date en dehors de ça?!" =) –

2

Réponse courte: vitesse, stockage optimal des données, index, capacité de recherche.

Votre base de données peut mieux utiliser les travaux internes lorsque tout a le bon type de données. Vous pouvez également faire un meilleur usage de la fonction de base de données spéciale.

Si vous souhaitez récupérer toutes les données d'un mois donné. Vous pouvez utiliser des fonctions de base de données spéciales pour simplement regrouper par mois lorsque vous utilisez un type de données de date et heure par exemple. Lorsque vous utilisez un varchar pour stocker une date, vous perdez toutes ces fonctionnalités.

La plupart des bases de données peuvent rechercher ou extraire des données plus rapidement à partir d'une table lorsque l'index a été créé sur un type de données INT. Si vous aviez créé ce champ de stockage en tant que varchar vous auriez perdu des performances

0

Performance est une raison, mais à ce jour pas parlé de ceux en cours d'exécution de ces types de requêtes (qui ne seraient pas possibles si tous les types sont VARCHAR)

SELECT SUM(total) total FROM purchases WHERE status = 'PAID'; 
SELECT * FROM users WHERE DATE_ADD(last_login, INTERVAL 3 MONTH) < NOW(); 
+0

Je pense que les deux "Poneys OMG" et moi-même l'avons effectivement mentionné dans nos explications. –

Questions connexes