powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка Incorrect string value на некоторых системах
16 сообщений из 16, страница 1 из 1
Ошибка Incorrect string value на некоторых системах
    #40077454
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разрабатываю приложение на Delphi, которое взаимодействует с удалённым сервером MariaDB (через ADO и ODBC-драйвер). На некоторых компьютерах (судя по всему, на Windows до 10 - Vista, 7, 8) при попытке отправить параметризированный запрос (INSERT, UPDATE) с кириллицей появляется ошибка:
автор[MySQL][ODBC 8.0(w) Driver][mysqld-5.5.5-10.3.29-MariaDB]Incorrect string value: '\xC2\xC2\xC8 \xF1\xE8…' for column <здесь целевые таблица и столбец> at row 1
Столбец в utf8. При этом, если не использовать запросы вручную, а, например, редактировать данные в TDBGrid, то кириллица успешно отправляется.
По всей видимости, где-то несовпадение кодировки при использовании параметров. Но вроде бы все параметры в utf8: база данных, столбец, драйвер, Delphi XE3 с Юникодом. В SELECT всё корректно отображается.

Также важный момент: кириллица корректно отправляется, если задать DataType параметра в ftWideString. В Windows 10 при присваивании значения параметра (через Value) DataType автоматически устанавливается в ftWideString, а в старых системах - ftString, поэтому и приходится устанавливать вручную ftWideString. По всей видимости в Windows 10 драйвер видит, что строки должны быть в ftWideString, а в старых системах нет. Как это поправить?
Тип строк, которые добавляются в строковые параметры запроса - обычный string.

Подключение к базе данных:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure OpenDBConnection;
  begin
    dmMain.dbConnection.Connected := False;
    dmMain.dbConnection.ConnectionString := Format(
      'Driver={MySQL ODBC 8.0 Unicode Driver};Port=%s;Server=%s;Database=%s;User=%s;Password=%s;',
      [Port, Server, Database, User, Password]);
    dmMain.dbConnection.Connected := True;
  end;



Также прикладываю значения системных переменных character (вызов из программы).
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077461
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и приходится устанавливать вручную ftWideString. По какому-то событию (н-р при открытии формы) пробегать по параметрам всех датасетов и выставлять программно.
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077463
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
и приходится устанавливать вручную ftWideString.
По какому-то событию (н-р при открытии формы) пробегать по параметрам всех датасетов и выставлять программно.
Очень уж костыльное решение :) Должно быть что-то другое. Хотя, по сути, сейчас нечто подобное и приходится использовать. Все запросы динамические, поэтому присвоили CommandText, и для каждого параметра указали DataType, присвоили Value. Но, повторюсь, думаю должно существовать какое-то более фундаментальное решение вопроса.
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077465
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndAction,

попробуйте:

Код: pascal
1.
2.
3.
    dmMain.dbConnection.ConnectionString := Format(
      'Driver={MySQL ODBC 8.0 Unicode Driver};Port=%s;Server=%s;Database=%s;User=%s;Password=%s;charset=UTF8;',
      [Port, Server, Database, User, Password]);
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077467
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён
M1ndAction,

попробуйте:

Код: pascal
1.
2.
3.
    dmMain.dbConnection.ConnectionString := Format(
      'Driver={MySQL ODBC 8.0 Unicode Driver};Port=%s;Server=%s;Database=%s;User=%s;Password=%s;charset=UTF8;',
      [Port, Server, Database, User, Password]);



Да, пробовал такой вариант - безрезультатно.
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077469
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndAction,

а просто указание COLLATE utf8_general_ci в самих запросах не спасает?
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077487
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndAction
Подключение к базе данных:
А где код вставки?
M1ndAction
Также прикладываю значения системных переменных character
Где?
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077491
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndActionНо вроде бы все параметры в utf8: база данных, столбец, драйвер

Вот только тебя в сообщении об ошибке явный ANSI (Windows-1251). А вообще "уже смешно"
начинается на "через ADO и ODBC-драйвер".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077494
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko
M1ndAction,

а просто указание COLLATE utf8_general_ci в самих запросах не спасает?

Не пробовал, но подобного - правки существующих запросов - хотелось бы избежать.


_Vasilisk_
M1ndAction
Подключение к базе данных:
А где код вставки?
M1ndAction
Также прикладываю значения системных переменных character
Где?

Изображение к первому сообщению не прикрепилось, так что покажу текстом:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results =
character_set_server = latin1
character_set_system = utf8

А что касается кода вставка, то например так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
cmdTemp: TADOCommand;

const
  tblEquip = 'equip';
  colEquipName = 'eqname';

  queryInsertEquipment =
    ' INSERT INTO ' + tblEquip + '(' +
    colEquipName + ') ' +
    'VALUES(:' +
    colEquipName + '); ';


function TdmMain.AddEquipment(const Equip: TEquipment;
  const RefreshEquipmentListDataSet: Boolean): Integer;
begin
  Result := 0;

  try
    cmdTemp.CommandText := queryInsertEquipment;
    cmdTemp.Parameters.ParamByName(colEquipName).Value := Equip.Name;
    cmdTemp.Execute;
    Result := GetLastID;

    if RefreshEquipmentListDataSet then
      RefreshDataSet(dsetEquipment, colEquipID, Result);
  except on E: Exception do
    fmMessage.ShowMessage(msgErrorAddEquipment, mtError);
  end;
end;



Dimitry Sibiryakov

M1ndActionНо вроде бы все параметры в utf8: база данных, столбец, драйвер

Вот только тебя в сообщении об ошибке явный ANSI (Windows-1251). А вообще "уже смешно"
начинается на "через ADO и ODBC-драйвер".

Да, возможно ANSI, хотя я пробовал указывать charset=cp1251 в строке соединения, но безрезультатно. Возможно, что-то иное по настройкам нужно скорректировать?
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077495
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndActionИзображение к первому сообщению не прикрепилось, так что покажу текстом:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results =
character_set_server = latin1
character_set_system = utf8

Это именно у проблемного коннекта или (внезапно) у коннекта в котором всё работает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077497
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

M1ndActionИзображение к первому сообщению не прикрепилось, так что покажу текстом:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results =
character_set_server = latin1
character_set_system = utf8

Это именно у проблемного коннекта или (внезапно) у коннекта в котором всё работает?


Они идентичны: и у проблемного соединения, и у рабочего выводятся одни и те же значения.
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077498
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndActionПо всей видимости в Windows 10 драйвер видит, что строки должны быть в ftWideString, а в
старых системах нет. Как это поправить?

Для начала - найти который именно из пяти последовательно подключенных тобою драйверов это
"видит".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077500
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

M1ndActionПо всей видимости в Windows 10 драйвер видит, что строки должны быть в ftWideString, а в
старых системах нет. Как это поправить?

Для начала - найти который именно из пяти последовательно подключенных тобою драйверов это
"видит".

Поподробнее, пожалуйста, откуда столько драйверов? Я использую только один - официальный от MySQL, который указан в строке подключения соединения.
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077502
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndAction
Я использую только один - официальный от MySQL
А подключаетесь к MariaDB? А ничего, что это разные СУБД?

https://mariadb.com/kb/en/mariadb-connector-odbc/
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077503
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M1ndActionПоподробнее, пожалуйста, откуда столько драйверов?

1. VCL обёртка для ADO.
2. ADO драйвер для OLE DB.
3. OLE DB драйвер для ODBC.
4. ODBC драйвер для MySQL.
5. Собственно MySQL драйвер.

Раз список одинаков, то пятую позицию можно считать невиновной. Остаются ещё четыре.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка Incorrect string value на некоторых системах
    #40077508
M1ndAction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
M1ndAction
Я использую только один - официальный от MySQL
А подключаетесь к MariaDB? А ничего, что это разные СУБД?

https://mariadb.com/kb/en/mariadb-connector-odbc/


Но они ведь совместимы между собой. Но вы правы, также исследую этот момент.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка Incorrect string value на некоторых системах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]