web-dev-qa-db-fra.com

pourquoi varbinary au lieu de varchar

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.

26
user1411084

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.

16
Sjoerd

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; 
6
András Ottó