I'm developing on Delphi application that communicate with remote MariaDB database (via ADO and ODBC driver). Find out that on some computers cannot add Cyrillic strings to DB. Error message like this:
[MySQL][ODBC 8.0(w) Driver][mysqld-5.5.5-10.3.29-MariaDB]Incorrect string value: '\xC2\xC2\xC8 \xF1\xE8…' for column <here's target tables and columns name> at row 1
Charset is utf8
, collate - utf8_bin
. It works perfect on my computer with Windows 10, but error fired on computers with Windows 8 and Vista. So, as I understand, problem not in database settings, but in OS. What it can be? Maybe regional settings or something this?
Update
Table:
SHOW CREATE TABLE equip;
CREATE TABLE `equip` (
`eqid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`eqname` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Наименование оборудования',
PRIMARY KEY (`eqid`),
UNIQUE KEY `eqname_UNIQUE` (`eqname`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Connect to DB:
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;
Insert data to DB:
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;