use*_*084 25 mysql sql database sql-server database-design
请看一下这张表:
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) | | | |
Run Code Online (Sandbox Code Playgroud)
所有这些信息都是文本,为什么他们将它们保存为二进制?
他们为所有表格执行此操作.
在MSSQL中:
我认为最大的区别仅在于nvarchar和之间varbinary.
因为nvarchar每个字符存储2个字节而不是1个字节.
varcharvarbinary与MSDN 一样:来自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))
Run Code Online (Sandbox Code Playgroud)
你可以在这里使用的是DATALENGTH函数:
SELECT datalength(TextData), datalength(binaryData) FROM test
Run Code Online (Sandbox Code Playgroud)
结果是19 - 19和7 - 7
所以在尺寸上他们是相同的,但还有另一个区别.如果检查列规范,可以看到varbinary(当然)没有排序规则和字符集,因此它可以帮助您轻松使用不同类型的编码和字符集中的值.
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Test'
ORDER BY
ORDINAL_POSITION ASC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29145 次 |
| 最近记录: |