PostgreSQL Oracle兼容性 - 计算字符长度与字节长度(char(?) 与varchar(?)空格如何计算长度)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介:

标签

PostgreSQL , Oracle , 字符长度 , 字节长度 , 空格 , varchar , char , 定长 , 变长 , 末尾追加空格


背景

由于多字节字符的存在,所以在数据库应用中,通常会出现两种计算字符串长度的需求:

1、计算字符串个数

2、计算字节数

在不同的数据库中,使用的函数不一样。

如何计算字符和字节个数

https://stackoverflow.com/questions/17062065/how-to-select-data-items-of-a-certain-length

Assuming you want the length in characters, the function names vary with RDBMS;

MySQL: CHAR_LENGTH().  
Oracle: LENGTH().  
SQL Server: LEN().  
PostgreSQL: CHAR_LENGTH() or LENGTH().  
SQLite: LENGTH().  

If you want the length in bytes, it's instead;

MySQL: LENGTH().  
Oracle: LENGTHB().  
SQL Server: DATALENGTH().  
PostgreSQL: OCTET_LENGTH().  

For example, selecting all rows with names longer than 10 characters in MySQL would be;

SELECT * FROM myTable WHERE CHAR_LENGTH(name) > 10;  

变长和定长的区别,字符计算个数的区别

以PostgreSQL为例。

1、定长,末尾自动追加空格,计算字符长度时,不计算末尾的空格。计算字节长度时,计算空格。

postgres=# select octet_length('abc    '::char(1000));  
 octet_length   
--------------  
         1000  
(1 row)  
  
postgres=# select char_length('abc    '::char(1000));  
 char_length   
-------------  
           3  
(1 row)  
  
  
postgres=# select char_length('你好abc    '::char(1000));  
 char_length   
-------------  
           5  
(1 row)  
  
postgres=# select octet_length('你好abc    '::char(1000));  
 octet_length   
--------------  
         1004  
(1 row)  

2、变长,末尾不追加空格,计算字符长度时,计算空格。计算字节长度时,计算空格。

  
postgres=# select char_length('abc    '::varchar(1000));  
 char_length   
-------------  
           7  
(1 row)  
  
postgres=# select octet_length('abc    '::varchar(1000));  
 octet_length   
--------------  
            7  
(1 row)  
  
postgres=# select octet_length('你好abc    '::varchar(1000));  
 octet_length   
--------------  
           13  
(1 row)  
  
postgres=# select char_length('你好abc    '::varchar(1000));  
 char_length   
-------------  
           9  
(1 row)  
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
SQL Oracle 关系型数据库
Oracle查询优化-将字符和数字分离
【2月更文挑战第4天】【2月更文挑战第9篇】将字符和数字分离
51 2
|
3月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
102 0
|
3月前
|
SQL Oracle 关系型数据库
java往oracle存clob类型的值时,字符长度过长怎么办?
java往oracle存clob类型的值时,字符长度过长怎么办?
171 1
|
3月前
|
Oracle 关系型数据库
Oracle查询优化-union all 与空字符
【1月更文挑战第4天】【1月更文挑战第10篇】两个表中有重复数据时,空值与空字符串在UNION ALL中的使用中的注意点。
100 0
|
3月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
计算 int, float, double 和 char 字节大小。
43 3
|
9月前
|
Oracle 关系型数据库
Oracle安装错误——[ INS-32010 ] 主目录位置包含无效字符
Oracle安装错误——[ INS-32010 ] 主目录位置包含无效字符
227 0
|
3月前
|
Oracle 关系型数据库
Oracle查询优化-在字符串删除特定字符
【2月更文挑战第4天】【2月更文挑战第8篇】比较灵活,列举三个常见的方式
125 0
|
9月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
68 1
|
SQL Oracle 关系型数据库
oracle数据类型varchar2和varchar的区别
varchar -- 存放定長的字符數據,最長2000個字符;varchar2 -- 存放可變長字符數據,最大長度為4000字符。   目前没有本质的区别 但是:varchar2是oracle提供的独特的数据类型oracle保证在任何版本中该数据类型向上和向下兼容但不保证varchar,这是...
897 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版