像"%M"不适用于字符数据类型PostgreSQL



like '%'在PostgreSQL中可以正常工作在varchar数据类型中,而不工作在char数据类型中。

在PostgreSQL中创建了如下表:create table movie(movie_name varchar(20), director char(20));[注:movie_name为varchar类型,director为char类型]并使用下面的查询插入几行。

insert into movie values('JaiBhim', 'Gnanavel');
insert into movie values('Dharbar', 'ARM');

之后,我使用了下面的select查询和'%'。

select * 
from movie 
where movie_name like '%m';

我得到了正确的行细节。[JaiBhim and Gnanavel].

我使用了另一个带有'%'的select查询,如下所示。

select * 
from movie 
where director like '%M';

对于这个,我期望返回一行,但它返回0行。

对于varchar, 'like %'给出正确的结果,对于char数据类型,它不给出。

这是预期的行为吗?

character用空格填充值,因此模式'%M'只在第10个字符是M时匹配character(10)

最好的解决方案是避免使用character而使用character varying,就像文档建议的那样。除此之外,您还可以使用正则表达式:

WHERE movie_name ~ 'M *$'