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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
392 0
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
195 0
|
12月前
|
SQL Oracle 关系型数据库
|
SQL 存储 Oracle
【YashanDB观点】论Oracle兼容性,我们需要做什么
我们经常发现,部分国产数据库声称与 Oracle兼容性高达90%,但在实际迁移过程中,仍需要频繁地修改业务应用的代码。为何实现与Oracle高兼容度的数据库产品如此困难?其中一个重要原因是Oracle兼容性不仅是模仿,而是一个非常复杂和工程量庞大的逆向工程。其技术实现的复杂性以及多如牛毛的细节,足以让多数“年轻”的数据库团队望洋兴叹。YashanDB作为一款从核心理论到关键系统均为原创的数据库产品,从构建初期就具备了技术优势,在Oracle兼容性实现上,敢于亮剑并充分发挥工匠精神,不断打磨,努力构筑一个真正形神兼备的数据库产品。以下将从YashanDB SQL引擎技术、Oracle兼容性的开发
|
SQL 存储 Oracle
【YashanDB观点】论Oracle兼容性,我们需要做什么
Oracle兼容性是目前国产数据库的关键任务之一,其直接影响到商业迁移的成本和竞争力。
269 8
|
存储 关系型数据库 Serverless
PostgreSQL计算两个点之间的距离
PostgreSQL计算两个点之间的距离
1291 60
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
SQL Oracle 关系型数据库
Oracle之有哪些日期计算函数?
Oracle之有哪些日期计算函数?
290 0
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
211 0
|
XML SQL Oracle
解决Oracle中XML插入数据时的空格问题
解决Oracle中XML插入数据时的空格问题
209 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 推荐镜像

    更多