Duplicata possible:
Quel est l'avantage d'utiliser varbinary sur varchar ici?
Veuillez consulter ce tableau:
http://www.mediawiki.org/wiki/Manual:Logging_table
Comme vous pouvez le voir, wikipedia utilise varbinary au lieu de varchar:
| log_type | **varbinary**(32) | NO | MUL | |
| log_action | **varbinary**(32) | NO | | |
| log_timestamp | **binary**(14) | NO | MUL | 19700101000000 |
| log_user | int(10) unsigned | NO | MUL | 0 |
| log_user_text | **varbinary**(255) | | | |
Toutes ces informations sont du texte, alors pourquoi les enregistrent-elles au format binaire?
Ils le font pour toutes les tables.
Mediawiki est passé de varchar à varbinary en début 2011 :
Guerre contre varchar. Changé toutes les occurrences de varchar (N) et varchar (N) binaire en varbinary (N). varchars cause des problèmes (erreurs "Mélange de classements non valides") sur les bases de données MySQL avec certaines configurations, notamment la configuration MySQL par défaut.
Dans MSSQL:
Je pense que la grande différence est seulement entre nvarchar
et varbinary
.
Parce que nvarchar
stocke 2 octets pour chaque caractère au lieu de 1 octet.
varchar
fait la même chose que varbinary
: de MSDN:
La taille de stockage est la longueur réelle des données entrées + 2 octets "pour les deux.
La différence ici est par varbinary Les données entrées peuvent avoir une longueur de 0 octet.
Voici un petit exemple:
CREATE TABLE Test (textData varchar(255), binaryData varbinary(255))
INSERT INTO Test
VALUES('This is an example.', CONVERT(varbinary(255),'This is an example.',0))
INSERT INTO Test
VALUES('ÜŰÚÁÉÍä', CONVERT(varbinary(255),'ÜŰÚÁÉÍä',0))
Ce que vous pouvez utiliser ici est la fonction DATALENGTH :
SELECT datalength(TextData), datalength(binaryData) FROM test
Le résultat est 19 - 19 et 7 - 7
Donc, en taille, ils sont les mêmes, MAIS il y a une autre différence. Si vous vérifiez les spécifications des colonnes, vous pouvez voir que le varbinary (bien sûr) n'a pas de classement et de jeu de caractères, il pourrait donc aider à utiliser facilement les valeurs de différents types d'encodage et de jeu de caractères.
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Test'
ORDER BY
ORDINAL_POSITION ASC;