问下pgsql中char类型怎么去除补余的空格?

Hopeness 2014-07-26 09:21:22
本人刚开始学pgsql,在用char类型的时候,发现每次取出数据都会把补余的空格也输出,我记得在mysql中会自动过滤掉吧,我知道trim()函数,但是不知道可不可以在哪里可以配置自动去除空格,其实只是查询没什么的,但是我的php项目是从mysql转过来的,很多字段都是char类型,php从pgsql也不自动去空格,造成逻辑判断经常有问题,希望在不改动过多代码的情况下完成这个需求。
令:我用PDO方式,不知道pdo是不是可以设置,希望有经验的朋友指点一下,谢谢!
还有个问题,在搜索相关问题的时候,在一个csdn博客里看见说:“虽然在某些其它的数据库系统里,character(n) 有一定的性能优势,但在 PostgreSQL 里没有。”,不清楚这个依据是什么,有了解的朋友帮我解释下谢了!
http://blog.csdn.net/dracotianlong/article/details/7828684
...全文
1698 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hopeness 2014-07-27
  • 打赏
  • 举报
回复
引用 1 楼 trainee 的回复:
一个方案是改用varchar, 但是假如这字段是主键或外键,不要改用varchar,还是用char。(有个血的教训) varchar 不会自动去掉后空格, 但也不会后补空格。 不过保险点,还是要增加trim函数。
问下,varchar做外键会有什么问题吗?
trainee 2014-07-27
  • 打赏
  • 举报
回复
一个方案是改用varchar, 但是假如这字段是主键或外键,不要改用varchar,还是用char。(有个血的教训) varchar 不会自动去掉后空格, 但也不会后补空格。 不过保险点,还是要增加trim函数。
trainee 2014-07-27
  • 打赏
  • 举报
回复
引用 2 楼 houpengg 的回复:
[quote=引用 1 楼 trainee 的回复:] 一个方案是改用varchar, 但是假如这字段是主键或外键,不要改用varchar,还是用char。(有个血的教训) varchar 不会自动去掉后空格, 但也不会后补空格。 不过保险点,还是要增加trim函数。
问下,varchar做外键会有什么问题吗?[/quote] 在postgresql中, varchar, text 类型的字符比较是不去掉后缀空格比较的,

'A     '='A'    
-------------
false
而在char 类型是去掉后缀空格比较的

'A     '::char(8)='A' ::char(8)   
-------------
true
而在mysql 中, 不管什么类型, 都是去掉后缀空格再比较, 都返回true 所以在postgresql中, 假如你用varchar 作主键\外键. 如果有一个健值"abc", 假如你用了你的软件之外的数据管理器进行修改, 不小心在abc后增加一个空格( 空格你是看不出来的) 此时这个健值就变了. 可想而知, 会是怎么样的后果. (我曾范了这个错, 让公司损失了好几千)

973

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧