Я подключаюсь к BBDD HANA из кода PHP. Разъем unixodbc. (таблица содержит испанские символы)
При попытке выбрать записи, если в каком-либо поле есть специальные символы (например, символ евро), они пропускают выборку и входят в odbc:
DIAG [S1000] [SAP AG] [LIBODBCHDB SO] [HDBODBC] Общая ошибка; -10427 Преобразование параметра / столбца (8) из типа данных NVARCHAR в ASCII завершилось неудачно
Конфиг odbc.ini
[hanadb]
Driver = /usr/sap/hdbclient/libodbcHDB.so
ServerNode = 172.17.xx.xx:31015
(я пытаюсь добавить эту строку, без каких-либо изменений)
DriverUnicodeType=1
DriverManagerEncoding = UTF-8
Locale = es_ES
characterset=UTF8
IANAAPPCODEPAGE=2026
Код в php
$result = odbc_exec($link,"SELECT * FROM ZIF_TCONDW ");
while($datos=odbc_fetch_array($result)) {
$query=sprintf("INSERT INTO condiciones values
{...}
поля с текстом:
Pedidos de 701 € 1200 €
Сбой и в файле трассировки:
DIAG [S1000] [SAP AG] [LIBODBCHDB SO] [HDBODBC] Общая ошибка; -10427 Преобразование параметра / столбца (8) из типа данных NVARCHAR в ASCII завершилось неудачно
Я тоже пытаюсь конвертировать тип в выделенном предложении
$result = odbc_exec($link,"SELECT LIFNR,ZONA,POSCOND,LEFT(STRTOBIN(CONCEPTO,'UTF-8') ,400) AS CONCEPTO, CONDICION ,ORDEN,AEDAT,AEUHR,AENAM FROM ZIF_TCONDW ");
или же
$result = odbc_exec($link,"SELECT LIFNR,ZONA,POSCOND,base64_encode(CONCEPTO) AS CONCEPTO, base64_encode(CONDICION) AS CONDICION ,ORDEN,AEDAT,AEUHR,AENAM FROM ZIF_TCONDW ");
Без изменений.
Эта проблема возникает, когда драйвер ODBC пытается передать данные Unicode вашим клиентским переменным.
Вы можете установить CHAR_AS_UTF8 = true
вариант подключения, чтобы избежать этого.
Увидеть Справочник по программированию клиентского интерфейса SAP HANA.
Других решений пока нет …