Quelle est la manière canonique de stocker du texte arbitraire (éventuellement annoté) en SQL?

StackOverflow https://stackoverflow.com/questions/95459

  •  01-07-2019
  •  | 
  •  

Question

Que font les wikis / stackoverflow / etc. faire quand il s'agit de stocker du texte? Le texte est-il cassé à la nouvelle ligne? Est-il divisé en morceaux de longueur fixe? Comment mieux stocker des morceaux de texte arbitrairement longs?

Était-ce utile?

La solution

nvarchar (max) ftw. parce que trop compliquer les choses simples est mauvais, mmkay?

Autres conseils

Je suppose que si vous devez offrir la possibilité de stocker de gros morceaux de texte et que vous pouvez vous permettre de ne pas trop regarder dans leur contenu lors d'une requête, vous pouvez utiliser CLobs.

Tout dépend du SGBDR que vous utilisez, ainsi que des types de texte que vous allez stocker. Si le texte est mis en forme en gros morceaux de données qui ont une signification en soi, comme par exemple en-tête / corps, vous pouvez alors diviser les données en colonnes de ces types. Cette méthode peut prendre plusieurs tables selon le contenu que vous traitez.

Je ne sais pas comment les autres SGBDR le traitent, mais je sais que ce n'est pas une bonne idée d'avoir plus d'une colonne ouverte dans chaque table (text ou varchar (max)). Vous voudrez donc vous assurer qu'une seule colonne contient un nombre de caractères illimité.

Concernant PostgreSQL - utilisez le type TEXT ou BYTEA . Si vous devez lire des fragments aléatoires, vous pouvez envisager de grands objets . / p>

Si vous souhaitez conserver des éléments tels que le formatage des chaînes, des guillemets et autres "& cr; crft", Dans le texte, comme le code l’aurait probablement, les caractères spéciaux doivent être ignorés en premier - sinon, lors de la soumission de la base de données, ils risquent de provoquer l’émission d’une commande non valide.

La plupart des langages de script disposent d'outils permettant de le faire de manière native.

Je suppose que cela dépend de l'endroit où vous souhaitez stocker le texte, si vous avez besoin d'éléments tels que des transactions, etc.

Les bases de données telles que SQL Server ont un type pouvant stocker des champs de texte longs. Dans SQL Server 2005, il s'agirait principalement de nvarchar (max) pour les chaînes de texte unicode longues. En utilisant une base de données, vous pouvez bénéficier de transactions et d'une sauvegarde / restauration facile en supposant que vous l'utilisez pour d'autres tâches, comme le fait StackOverflow.com.

L’alternative consiste à stocker du texte dans des fichiers sur le disque. Cela peut être assez simple à mettre en œuvre et peut fonctionner dans des environnements où une base de données n’est pas disponible ou trop lourde.

En ce qui concerne le format du texte stocké dans une base de données ou un fichier, il est probablement très proche de l’entrée. Si c'est du HTML, il suffit de l'insérer dans une fonction qui lui échappera correctement.

Il est important de vous rappeler que vous souhaitez probablement utiliser Unicode ou UTF-8 de la création au stockage et vice-versa. Cela vous permettra de prendre en charge des langues supplémentaires. Tout problème avec ce mécanisme d'encodage corrompra votre texte. Historiquement, les utilisateurs pouvaient utiliser ASCII par défaut en supposant qu'ils économisaient de l'espace disque, etc.

Pour SQL Server:

Utilisez un varchar (max) pour stocker. Je pense que la limite supérieure est de 2 Go.

N'essayez pas d'échapper au texte vous-même. Passez le texte à travers une structure de paramétrage qui fera les échappées correctement pour vous. En .Net, vous pouvez ajouter un paramètre à une commande SqlCommand ou simplement utiliser LinqToSQL (qui gère ensuite la commande SqlCommand pour vous).

Je pense que StackOverflow stocke le texte au format Markdown dans une colonne de type "texte" de taille arbitraire. Peut-être comme UTF8 (mais ça pourrait être UTF16 ou quelque chose comme ça. Je suppose que c'est SQL Server, dont je ne connais pas grand chose).

En règle générale, vous souhaitez stocker des éléments dans votre base de données sous la forme "brute" possible. Autrement dit, faites tout votre décodage et éventuellement votre nettoyage, mais ne faites rien d’autre (par exemple, s’il s’agit de Markdown, ne le codez pas en HTML, conservez-le dans son format "brut" original.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top