Доброго времени суток всем!
Вопрос относительно использования utf кодировки в проекте.
Среда разработки Delphi 2009
Сервер базы данных MySQL 5.0.45
Компоненты MySQLDAC 2.7
Проект пока пробный, испытательный... За корявость кода не пинайте
Пытаюсь создать базу и таблицу в utf8 кодировке и записать в таблицу записи содержащие казахские символы.
Если без SET NAMES, то получаю вопросы вместо символов.
А если использовать SET NAMES то ругается MySQL error code (1366)
Вот код:
В данном случае я попробовал передать строку как параметр, но и непосредственно в запросе пробовал.
Как мне добиться результата?
Я конечно могу вместе со своей программой ставить драйвера KazWorkDrv - тогда даже программа на Delphi 7 будет с казахским работать. Но ведь Delphi 2009 сам работает прекрасно с юникодом и хотелось бы обойтись без дополнительных дров.
Забыл еще сказать, что сам казахский язык используется стандартный, который есть в любой XP-ке.
Вопрос относительно использования utf кодировки в проекте.
Среда разработки Delphi 2009
Сервер базы данных MySQL 5.0.45
Компоненты MySQLDAC 2.7
Проект пока пробный, испытательный... За корявость кода не пинайте
Пытаюсь создать базу и таблицу в utf8 кодировке и записать в таблицу записи содержащие казахские символы.
Если без SET NAMES, то получаю вопросы вместо символов.
А если использовать SET NAMES то ругается MySQL error code (1366)
Вот код:
Код:
if not mySQLDatabase1.Connected then
begin
mySQLDatabase1.Params.Clear;
mySQLDatabase1.Host := 'ip сервака';
mySQLDatabase1.Port := 3306;
mySQLDatabase1.UserName := 'root';
mySQLDatabase1.UserPassword := 'мой пароль';
mySQLDatabase1.Params.Add('SET CHARACTER SET utf8');
mySQLDatabase1.Params.Add('SET CHARACTER_SET_CLIENT=utf8');
mySQLDatabase1.Params.Add('SET CHARACTER_SET_CONNECTION=utf8');
mySQLDatabase1.Params.Add('SET CHARACTER_SET_RESULTS=utf8');
end;
try
mySQLDatabase1.Connect;
mySQLQuery1.Active := false;
mySQLQuery1.SQL.Clear;
mySQLQuery1.SQL.Add('SET NAMES utf8;');
mySQLQuery1.SQL.Add('CREATE DATABASE IF NOT EXISTS utfka CHARACTER SET utf8;');
mySQLQuery1.SQL.Add('CREATE TABLE IF NOT EXISTS utfka.tempushka (name VARCHAR(255)) ENGINE=MyISAM DEFAULT CHARSET utf8;');
mySQLQuery1.SQL.Add('DELETE FROM utfka.tempushka;');
mySQLQuery1.SQL.Add('INSERT INTO utfka.tempushka (name) VALUES (:stroka);');
// mySQLQuery1.SQL.Add('INSERT INTO utfka.tempushka (name) VALUES ("құү.ғ,өңәі");');
mySQLQuery1.ParamByName('stroka').AsWideString := 'құү.ғ,өңәі';
// mySQLQuery1.ParamByName('stroka').AsString := 'құү.ғ,өңәі';
mySQLQuery1.SQL.Add('SELECT * FROM utfka.tempushka;');
mySQLQuery1.Active := true;
except
mySQLDatabase1.Disconnect;
end;
В данном случае я попробовал передать строку как параметр, но и непосредственно в запросе пробовал.
Как мне добиться результата?
Я конечно могу вместе со своей программой ставить драйвера KazWorkDrv - тогда даже программа на Delphi 7 будет с казахским работать. Но ведь Delphi 2009 сам работает прекрасно с юникодом и хотелось бы обойтись без дополнительных дров.
Забыл еще сказать, что сам казахский язык используется стандартный, который есть в любой XP-ке.
Последнее редактирование модератором: