Amazon redshift varchar的红移负片(最大值)

Amazon redshift varchar的红移负片(最大值),amazon-redshift,Amazon Redshift,因此,我将sql server列标记为nchar(1)表示货币符号,并将其移植到红移,因为欧元是一个3字节的unicode字符,所以需要在红移中使用char(3)(技术上没有nchar)。因此,我想切换我的etl解决方案,将所有varchar列创建为varchar(max)。在红移中,使用varchar(max)代替varchar/varchar(100)/etc是否有任何缺点?是的,它确实有缺点 强烈建议您不要使用VARCHAR(MAX)作为默认列大小。这需要在查询的所有阶段分配更多内存,并将

因此,我将sql server列标记为nchar(1)表示货币符号,并将其移植到红移,因为欧元是一个3字节的unicode字符,所以需要在红移中使用char(3)(技术上没有nchar)。因此,我想切换我的etl解决方案,将所有varchar列创建为varchar(max)。在红移中,使用varchar(max)代替varchar/varchar(100)/etc是否有任何缺点?

是的,它确实有缺点

强烈建议您不要使用
VARCHAR(MAX)
作为默认列大小。这需要在查询的所有阶段分配更多内存,并将减少在内存中完成的工作量,而不会溢出到磁盘


您可以使用稍微宽松的
VARCHAR
大小,例如64>128>256>512,而不会造成太多性能损失,但只在需要时使用
VARCHAR(MAX)

同上-不要这样做。UTF-8字节长度的字符串是ETL应该知道的函数。如果没有,可以将varchar长度设置为字符长度的4倍。