PostgreSQL中CHAR类型补空格异常?REPLACE函数表现差异疑问
PostgreSQL中CHAR类型REPLACE结果不一致的原因
这是因为PostgreSQL对CHAR(n)(定长字符类型)的处理逻辑和Oracle、SQL Server存在差异:
PostgreSQL的CHAR(n)行为
当数据存入CHAR(n)列时,确实会自动补空格到指定长度,但在读取该列数据、执行字符串操作(比如REPLACE)时,PostgreSQL会自动截断尾部的填充空格。
所以从test表的col1列取出的'aaa',实际参与REPLACE运算的是没有尾部空格的字符串,自然替换不出任何内容,结果还是'aaa'。直接操作字符串常量的情况
第一个SELECT里的'aaa '是普通字符串常量,里面的空格是显式输入的,不属于CHAR类型的自动填充空格,所以REPLACE会正常替换所有空格,得到aaaxxxxxxx。与Oracle、SQL Server的差异
Oracle和SQL Server会保留CHAR(n)类型的尾部填充空格,在执行字符串操作时这些空格会被当作普通空格处理,所以REPLACE会替换掉这些填充空格,最终结果和直接操作常量一致。
内容的提问来源于stack exchange,提问作者drk
相关产品推荐
相关产品推荐

