Utilisation des données de type text et image

Important

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez les types de données varchar(max), nvarchar(max) et varbinary(max) à la place. Pour plus d'informations, consultez Utilisation de types de données de valeur élevée.

MicrosoftSQL Server stocke les chaînes de caractères de plus de 8 000 caractères et les données binaires de plus de 8 000 octets dans des types de données spéciaux appelés text et image. Les chaînes Unicode de plus de 4000 caractères sont stockées dans le type de données ntext.

Par exemple, un fichier texte (.txt) volumineux contenant des informations client doit être importé dans votre base de données SQL Server. Ces données doivent être stockées comme un élément de données unique plutôt qu'intégrées dans les colonnes multiples de vos tables de données. Vous pouvez, à cette fin, créer une colonne avec le type de données text. Toutefois, si vous devez stocker des logos de société, actuellement stockés sous forme d'images TIFF (Tagged Image File Format) (.tif) de 10 Ko chacune, créez une colonne avec le type de données image.

Si les données textuelles à stocker sont au format Unicode, utilisez le type de données ntext. Par exemple, une lettre type créée pour des clients internationaux contiendra probablement des orthographes et des caractères internationaux utilisés dans différentes langues. Stockez ces données dans une colonne ntext.

Chaque valeur de données text et ntext dispose d'un classement. Les classements définissent des attributs tels que les règles de comparaison ainsi que la sensibilité à la casse ou à l'accentuation. Les classements de valeurs text spécifient également une page de codes, qui définit les modèles de bits utilisés pour représenter chaque caractère. Chaque valeur ntext utilise la page de codes Unicode, qui est la même pour tous les classements. Chaque base de données présente un classement par défaut. Lorsqu'une colonne text ou ntext est créée, elle reçoit le classement par défaut de la base de données à moins que vous n'affectiez un classement spécifique à l'aide de la clause COLLATE. Lorsque deux valeurs text ou ntext de classements différents sont associées ou comparées, les règles de priorité des classements déterminent celui qui est utilisé pour l'opération.

Les données image sont stockées sous forme de chaîne de bits et ne sont pas interprétées par SQL Server. Toute interprétation des données contenues dans une colonne image doit être réalisée par l'application. Par exemple, une application peut stocker des données dans une colonne image en utilisant un format BMP, TIFF, GIF ou JPEG. L'application qui lit les données dans la colonne image doit reconnaître le format des données et les afficher correctement. Une colonne image fournit simplement un emplacement pour stocker la suite de bits qui constitue la valeur des données image.

Utilisation de l'option texte dans la ligne pour stocker des valeurs text, ntext et image

Généralement, les chaînes text, ntext ou image sont des chaînes de caractères ou binaires volumineuses (jusqu'à 2 Go) stockées en dehors d'une ligne de données. La ligne de données contient uniquement un pointeur de texte de 16 octets pointant vers le nœud racine d'une arborescence composée de pointeurs internes qui mappent les pages dans lesquelles les fragments de chaîne sont stockés.

Grâce à SQL Server, vous pouvez stocker des valeurs text, ntext et image de taille réduite ou moyenne dans une ligne de données, ce qui augmente la vitesse d'exécution des requêtes qui accèdent à ces valeurs.

Lorsque la chaîne text, ntext ou image est stockée dans la ligne de données, SQL Server ne doit pas accéder à une page ou à un jeu de pages distinct pour lire ou écrire la chaîne. Ainsi, la lecture ou l'écriture des chaînes en lignes text, ntext et image est presque aussi rapide que la lecture ou l'écriture des chaînes varchar, nvarchar et varbinary.

Pour stocker des chaînes text, ntext ou image dans la ligne de données, activez l'option text in row à l'aide de la procédure stockée sp_tableoption.

sp_tableoption N'MyTable', 'text in row', 'ON';

Vous pouvez, si vous le souhaitez, spécifier une limite maximale (comprise entre 24 et 7 000 octets) pour la longueur d'une chaîne text, ntext et image stockée dans une ligne de données :

sp_tableoption N'MyTable', 'text in row', '1000';

Si vous spécifiez 'ON' au lieu d'une limite précise, la limite prend par défaut la valeur 256 octets. Cette valeur par défaut fournit le meilleur compromis en matière de performances : elle est suffisante pour stocker les chaînes de taille réduite et les pointeurs de texte de la racine dans les lignes, tout en restant assez faible pour ne pas réduire le nombre de lignes par page au point d'affecter les performances.

Bien qu'il soit généralement déconseillé d'attribuer une valeur inférieure à 72, évitez également d'affecter une valeur trop élevée, notamment pour les tables dont les colonnes text, ntext, et image ne sont référencées par pratiquement aucune instruction ou qui contiennent plusieurs colonnes text, ntext et image.

Vous pouvez également utiliser sp_tableoption pour désactiver l'option en spécifiant une valeur 'OFF' ou 0 :

sp_tableoption N'MyTable', 'text in row', 'OFF';