2016-12-14 54 views
0

我有这样的查询和这样的错误:Vertica的 - 串个字节长度

dbadmin=> update platforms set description = E'ЮлÑ\217 - Ð\237еÑ\200Ñ\203, Ð\221оливиÑ\217, ЭквадоÑ\200 where id = 189; 
ERROR 4800: String of 92 octets is too long for type Varchar(80) 

当我尝试检查刺痛的长度,我有另外一个值:

dbadmin=> select octet_length(E'ЮлÑ\217 - Ð\237еÑ\200Ñ\203, Ð\221оливиÑ\217, ЭквадоÑ\200'); 
octet_length 
-------------- 
      84 
(1 row) 

为什么值是不同的?

而我该如何自动切割字符串到特定的八位字节数? 目前我使用Python函数,并返回字符串长度为80(上面的字符串),也有一些sqlalchemy类:

from sqlalchemy.sql.sqltypes import String 
from project import SessionVertica 

def process(max_length, value): 
    literal_processor = String.literal_processor(SessionVertica.bind.dialect) 
    if literal_processor: 
     result = unicode(literal_processor(value)) 
    else: 
     result = unicode(value) 
    if len(result) >= max_length: 
     result = result[:max_length - 2] + '\'' 
    return 'E' + result 

回答

0

容易:)

def process(max_length, value): 
    literal_processor = String.literal_processor(SessionVertica.bind.dialect) 
    if literal_processor: 
     result = unicode(literal_processor(value)) 
    else: 
     result = unicode(value) 
    return result + '::varchar({length})'.format(length=max_length)