sql - Postgres 字符 (50) 与 'some string' 比较

标签 sql postgresql

有人可以向我解释为什么 postgresql 中的这种比较没有按照我想要的方式工作吗?

所以我有一个名为 customer 的数据库,它包含 customerid、firstname、lastname、phone 和 city 列。这些列中的每一列都是一个 Character(50)。我只想找到来自某个城市的客户,并运行多个查询试图弄清楚如何选择某个城市。我觉得这将是一个简单的答案,但我对 sql 查询还很陌生。

我运行的第一个查询是这个

SELECT * 
FROM customer c 
WHERE c.city = 'Denver'

此查询未返回任何结果,我也尝试了 LIKE、ILIKE 似乎没有任何效果我什至将其从 character(50) 更改为 character varying 但仍然没有结果.. 不确定我在这里做错了什么

最佳答案

因为 character 将所有值填充到定义的长度。所以 'Denver' 存储为 'Denver '

Quote from the manual

Values of type character are physically padded with spaces to the specified width n, and are stored and displayed that way

SQL 标准就是这样定义这种数据类型的。这是一个古老的遗留下来的。

简而言之:从不使用字符。使用 varchar 总是更好(基本上每个 SQL 数据库都是如此 - 对于 Postgres 更是如此)。

关于sql - Postgres 字符 (50) 与 'some string' 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777677/

相关文章:

regex - 如何简化 postgres regexp_replace

postgresql - psql : error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" (Ubuntu)

mysql - 如何根据排序顺序百分位数进行分类/评分

sql - 比较行之间的值

php - 在 ProductSell 模型中,有一个日期列类型为 varchar,格式为 d/m/Y 我如何使用其间检索数据?

sql - 如何在我的 R 数据框中更改/清理此特定行值 [数据类型字符串]

postgresql - 条件唯一约束未正确更新

sql - 是否可以为 psql 中的表创建全局别名?

sql - Postgres jsonb如何检查某些值不为空

sql - 通过来自不同未链接表的不同字段的连续循环