我在Postgres中有一些很大的varchar
值,我想选择并移动到其他地方。他们要去的地方使用VARCHAR(4095)
,所以我最多只需要4095字节(我认为这是字节),其中一些varchar相当大,所以性能优化将是SELECT它们的截断版本。
我该怎么做?
类似于:
SELECT TRUNCATED(my_val, 4095) ...
我不认为这是一个字符的长度,但它需要一个字节的长度?
我在Postgres中有一些很大的varchar
值,我想选择并移动到其他地方。他们要去的地方使用VARCHAR(4095)
,所以我最多只需要4095字节(我认为这是字节),其中一些varchar相当大,所以性能优化将是SELECT它们的截断版本。
我该怎么做?
类似于:
SELECT TRUNCATED(my_val, 4095) ...
我不认为这是一个字符的长度,但它需要一个字节的长度?
1条答案
按热度按时间kse8i1jr1#
varchar(n)
中的n
是字符数,而不是字节数。The manual:SQL定义了两种主要的字符类型:
character varying(n)
和character(n)
,其中n
是正整数。这两种类型都可以存储长度为 *n
***个字符(不是字节)**的字符串。大胆强调我的。
最简单的“截断”字符串的方法是使用
left()
:或者只是铸造:
The manual once more:
如果显式地将值转换为
character varying(n)
或character(n)
,则过长值将被截断为n
个字符,而不会引发错误。(这也是SQL标准所要求的。