pourquoi varbinary au lieu de varchar [dupliquer]

possibilité de dupliquer:

Quel est l'avantage d'utiliser varbinary sur varchar ici?

s'il vous Plaît prendre un coup d'oeil à ce tableau :

http://www.mediawiki.org/wiki/Manual:Logging_table

comme vous pouvez le voir wikipedia utiliser varbinary à la place 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 des textes, alors pourquoi les enregistrer en binaire ?

Ils font cela pour toutes les tables .

22
demandé sur Community 2012-11-15 12:20:14

2 réponses

Mediawiki changé de varchar à varbinary dans début 2011 :

Guerre de type varchar. Changé toutes les occurrences de varchar (N) et varchar(N) binaire à varbinaire (N). les varchars causent des problèmes ("mélange invalide de sur les bases de données MySQL avec certaines configs, la plupart des notamment la config MySQL par défaut.

13
répondu Sjoerd 2017-12-01 00:57:39

In 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 : à partir de MSDN:

La taille de stockage est la longueur réelle des données d'entrée + 2 octets" pour tous les deux.

la différence est ici par varbinary Les données saisies peuvent être 0 octets de longueur.

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 le DATALENGTH fonction:

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 cochez la colonne spécifications, vous pouvez voir, que le varbinary (bien sûr) n'a aucune collation et jeu de caractères, de sorte qu'il pourrait aider à utiliser des valeurs de différents types d'encodage et jeu de caractères facilement.

SELECT 
  *
FROM   
  INFORMATION_SCHEMA.COLUMNS 
WHERE   
  TABLE_NAME = 'Test' 
ORDER BY 
  ORDINAL_POSITION ASC; 
5
répondu András Ottó 2012-11-15 12:08:22