存储长度那些事

FF,1111 1111,1 Byte,1 字节,8 位,8 bit,0~255,unsigned char。

一般

short2 byte,16位,FF FF

int4byte32位FF FF  FF FF

long4byte32位FF FF  FF FF

long8byte,64位FF FF  FF FF  FF FF  FF FF

### PostgreSQL 中字符长度存储长度的区别及计算方式 #### 字符长度 (Character Length) 字符长度指的是字符串中字符的数量。对于多字节字符集(如 UTF-8),一个字符可能占用多个字节。在 PostgreSQL 中,可以使用 `LENGTH()` 或者 `CHAR_LENGTH()` 函数来获取字符串的字符数量。 ```sql SELECT LENGTH('你好') AS char_count; -- 返回 2 ``` 这些函数会按照字符计数而不是字节数量[^3]。 #### 存储长度 (Storage Length) 存储长度是指数据库实际用来保存该字符串所使用的磁盘空间大小。这取决于编码方式以及具体的数据类型: - **VARCHAR**: 可变长度字符串,仅存储实际所需的字节数加上额外的一个或几个字节表示长度。 - **TEXT**: 类似于 VARCHAR,但是没有最大长度限制。 - **CHAR(n)**: 定义了一个固定的宽度 n 的字段,即使输入的内容少于 n 个字符也会被填充到 n 长度,这意味着它总是占据相同的存储空间,不论内容多少[^1]。 例如,在 UTF-8 编码下,“你好”两个汉字占用了六个字节的空间,而如果将其存入 CHAR(10),则剩余的位置会被空白填补至总共十个字符对应的字节数。 为了更直观地展示这一点,下面是一个简单的 SQL 查询例子说明不同类型的存储特性: ```sql CREATE TABLE test_strings ( id SERIAL PRIMARY KEY, fixed_char CHAR(10), var_char VARCHAR(10) ); INSERT INTO test_strings(fixed_char, var_char) VALUES ('hi', 'hello'); -- 查看实际存储情况 SELECT pg_column_size(fixed_char), pg_column_size(var_char) FROM test_strings WHERE id=1; ``` 此查询展示了不同类型的实际存储开销差异。 #### 计算方法总结 - 对于单字节字符集(ASCII),字符长度等于存储长度。 - 多字节字符集中,比如 UTF-8 下面: - 英文字母和其他一些简单符号通常是 1 字节; - 拉丁字母扩展区 A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z 是 2 到 4 字节不等; - CJK 统一表意文字(即大部分常用汉字)是 3 字节; 因此,在处理国际化应用时需要注意区分这两种不同的概念,并根据业务逻辑选择合适的方法来进行操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值