Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

字符类型的示例

CREATE TABLE 语句

以下 CREATE TABLE 语句演示 VARCHAR 和 CHAR 数据类型的使用:

Copy
create table address( address_id integer, address1 varchar(100), address2 varchar(50), district varchar(20), city_name char(20), state char(2), postal_code char(5) );

下列示例使用此表。

可变长度字符串中的尾部空格

由于 ADDRESS1 是 VARCHAR 列,插入的第二个地址中的尾部空格始终无语义意义。换言之,插入的这两个地址匹配

Copy
insert into address(address1) values('9516 Magnolia Boulevard'); insert into address(address1) values('9516 Magnolia Boulevard ');
Copy
select count(*) from address where address1='9516 Magnolia Boulevard'; count ------- 2 (1 row)

如果 ADDRESS1 列是 CHAR 列并且插入了相同的值,则 COUNT(*) 查询会将字符串识别为相同并返回 2

LENGTH 函数的结果

LENGTH 函数识别 VARCHAR 列中的尾部空格:

Copy
select length(address1) from address; length -------- 23 25 (2 rows)

CITY_NAME 列 (是 CHAR 列) 中的 Augusta 的值,不管输入字符串有任何尾部空格,始终返回 7 个字符的长度。

超出列长度的值

未截断字符串来匹配列的声明宽度:

Copy
insert into address(city_name) values('City of South San Francisco'); ERROR: value too long for type character(20)

解决此问题的一个办法是将此值强制转换为列的大小:

Copy
insert into address(city_name) values('City of South San Francisco'::char(20));

在此示例中,字符串 (City of South San Fr) 的前 20 个字符将加载到列中。