首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与DATALENGTH()的简单混淆

与DATALENGTH()的简单混淆
EN

Database Administration用户
提问于 2019-05-29 15:33:46
回答 2查看 37关注 0票数 1

DATALENGTH()函数返回以字节为单位的数据长度。

桌子是这样的:

代码语言:javascript
复制
create table tb3 
( 
id int, 
id2 varchar(100), 
nome varchar(200)
)

| id      | id2   | nome  |   |
|---------|-------|-------|---|
| 1       | 1     | r     |   |
| 1       | 11    | r1    |   |
| 1       | 111   | r11   |   |
| 1       | 1111  | r111  |   |
| 1       | 11111 | r1111 |   |
| 11      | 11111 | r1111 |   |
| 1111111 | 11111 | r1111 |   |

但当我这样做的时候:

select DATALENGTH(id), DATALENGTH(id2), DATALENGTH(nome) from tb3

代码语言:javascript
复制
| (No column name) | (No column name) | (No column name) |   |
|------------------|------------------|------------------|---|
| 4                | 1                | 1                |   |
| 4                | 2                | 2                |   |
| 4                | 3                | 3                |   |
| 4                | 4                | 4                |   |
| 4                | 5                | 5                |   |
| 4                | 5                | 5                |   |
| 4                | 5                | 5                |  

为什么它说每个varchar字符只使用一个字节?如果我没有弄错,varchar使用两个字节+字符数。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-05-29 15:50:11

'DATALENGTH()‘函数只返回数据的长度,这些额外的两个字节被认为是“元数据”--关于数据和/或其存储的信息。

如果传递一个字符串文本函数(DATALENGTH('12345')返回5),则得到相同的值--如果函数包含存储开销以及字符串的内容,情况就不会如此。

要考虑存储开销,DATALENGTH函数需要知道或能够派生出值来自何处,以及如果数据被压缩等,该位置的结构,以及所有这些都会使该函数的效率大大降低。

票数 3
EN

Database Administration用户

发布于 2019-05-29 15:59:32

页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/239350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档