可能重复:
What is the advantage of using varbinary over varchar here?
请看一下这张表:
http://www.mediawiki.org/wiki/Manual:Logging_table
正如您所见,维基百科使用varbinary而不是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) | | | |
所有这些信息都是文本,为什么他们将它们保存为二进制文件?
他们为所有表格执行此操作。
答案 0 :(得分:16)
Mediawiki在early 2011中从varchar更改为varbinary:
对varchar进行战争。更改了所有出现的varchar(N)和varchar(N) 二进制到varbinary(N)。 varchars导致问题(“无效混合 大多数情况下,在具有某些配置的MySQL数据库上的排序“错误” 特别是默认的MySQL配置。
答案 1 :(得分:6)
在MSSQL中:
我认为差异仅在nvarchar
和varbinary
之间。
因为nvarchar
为每个字符存储2个字节而不是1个字节。
varchar
与varbinary
完全相同:来自MSDN:
存储大小是输入数据的实际长度+ 2个字节“ 对于两者。
这里的区别是varbinary 输入的数据可以是0 字节长度。
这是一个小例子:
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))
这里可以使用DATALENGTH函数:
SELECT datalength(TextData), datalength(binaryData) FROM test
结果是19 - 19和7 - 7
因此,它们的大小相同,但还有另一个区别。如果检查列规范,可以看到varbinary(当然)没有排序规则和字符集,因此它可以帮助您轻松使用不同类型的编码和字符集中的值。
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Test'
ORDER BY
ORDINAL_POSITION ASC;