Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类Postgresql中使用下划线_Sql_Postgresql_Padding_Sql Like_Sqldatatypes - Fatal编程技术网

在类Postgresql中使用下划线

在类Postgresql中使用下划线,sql,postgresql,padding,sql-like,sqldatatypes,Sql,Postgresql,Padding,Sql Like,Sqldatatypes,我试图在postgresql中使用下划线来搜索特定的数据模式,但它似乎不起作用 客户端版本为9.2.21,服务器版本为9.4.12 比如说, select * from table1 where f1 like '___' 即使表中存在明显的匹配项,也不返回任何内容--即,存在具有匹配值的数据--例如f1='123' 我想知道是否存在影响此行为的系统配置/参数 或者这可以用其他方式解释吗?存储在定义为char(9)的列中的值将用空格填充到定义的长度。因此,当您在该列中存储'123'时,它实

我试图在postgresql中使用下划线来搜索特定的数据模式,但它似乎不起作用

客户端版本为9.2.21,服务器版本为9.4.12

比如说,

select * 
from table1 
where f1 like '___'
即使表中存在明显的匹配项,也不返回任何内容--即,存在具有匹配值的数据--例如
f1='123'

我想知道是否存在影响此行为的系统配置/参数


或者这可以用其他方式解释吗?

存储在定义为
char(9)
的列中的值将用空格填充到定义的长度。因此,当您在该列中存储
'123'
时,它实际上存储
'123'

您需要修剪这些尾随空白:

where trim(f1) = '___'

但是您应该完全避免使用
char
类型。与
varchar
相比,它没有任何优势,但有几个缺点(您刚刚发现了一个)

列数据类型?它是char(9)类型值只是一个示例。可能是阿尔法。当所有值的字符数相同时(例如,如果所有值都是ISO标准国家/地区代码),是否
char()
保存一个或两个字节(不编码长度)?@GordonLinoff:不。它们的存储方式完全相同(除了
char()
是填充存储的。有趣的是,在大多数数据库中,
char()
保存一到两个长度字节。@GordonLinoff我不知道“most”,但它肯定不会在Postgres或Oracle中保存任何内容。为什么显示char类型的字段值时不显示填充?例如
SELECT'>'|f1 | |'