Насколько мне известно, HANA не понимает байтовое кодирование, такое как python, поэтому я думаю, что есть путаница, если вы используете это представление в консоли sql. Таким образом, в python при печати b'G\xa2ac\xa0av\xf6' байт, который не может быть представлен в ascii (ваша локальная кодировка?), имеет префикс \x.
Если вы хотите это сделать, вы можете сначала преобразовать это в шестнадцатеричное представление в python.
>>> import binascii
>>> binascii.hexlify(b'\xa2ac\xa0av\xf6')
b'47a26163a06176f6'
Это даст вам единообразное представление вашего массива байтов в шестнадцатеричном виде, которое вы теперь можете использовать в своей консоли SQL (например, в HANA Studio и т.п.):
INSERT INTO TestTable VALUES(x'47a26163a06176f6');
-- OR
INSERT INTO TestTable VALUES(HEXTOBIN('47a26163a06176f6'));
Обратите внимание, что префикс b изменяется на x в первом случае, чтобы указать HANA, что он должен рассматривать это как двоичные данные в шестнадцатеричном представлении.
Чтобы вставить значение из Python 2 в качестве подготовленного оператора:
>>> cursor.execute("INSERT INTO TestTable Values(?)", \
parameters=[binascii.hexlify(b'G\xa2ac\xa0av\xf6')])
PyHDB, кажется, ожидает, что строка справится правильно, но в Python 3 hexlify
даст массив байтов, поэтому вам нужно снова превратить результат в строку
>>> param = str(binascii.hexlify(b'G\xa2ac\xa0av\xf6'), 'ascii')
>>> cursor.execute("INSERT INTO TestTable Values(?)", parameters=[param])
Я думаю, это можно считать ошибкой в PyHDB или, по крайней мере, несоответствием. Просто для полноты картины в клиенте SAP dbapi есть класс Binary для переноса байтовых массивов для этой цели.
Теперь запросите это с вашим клиентом
>>> import pyhdb
>>> con = pyhdb.connect(....)
>>> cursor = con.cursor()
>>> cursor.execute('SELECT * FROM TestTable')
>>> cursor.fetchall()
[(b'G\xa2ac\xa0av\xf6',)]
Подводя итог: b'G\xa2ac\xa0av\xf6' не является представлением, которое HANA понимает как таковое при использовании его в операторе SQL. Нам нужно найти общий язык, для этого мы преобразовали массив байтов в шестнадцатеричное представление (hexlify
) и сказали HANA обрабатывать его как таковое (x-prefix/HEXTOBIN).
Как Ларс Бр. упомянуто, если это действительно литералы Unicode, вы можете рассмотреть NVARCHAR как тип данных.
person
Goldfishslayer
schedule
03.08.2017