2016-12-14 4 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) 

Почему значение отличается ?

И как я могу автоматически отрезать строку до определенного числа октетов? В настоящее время я использую функцию питона, и он возвращает строку длиной 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)