Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Delphi XE + ADO + кириллица в MySQL


Автор: malor 20.9.2011, 11:03
Таблицу создавал так:
Код
CREATE TABLE category
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    category TINYINT UNSIGNED NOT NULL,
    item VARCHAR(100) CHARACTER SET UTF8 NOT NULL 
);

INSERT INTO category (category, item) VALUES 
(1, 'До 12'),
(1, 'После 12');

user posted image

Конфиг my.ini:
Цитата
[client]
port=3306

[mysql]
#default-character-set=cp1251
default-character-set=utf8

[mysqld]
#skip-character-set-client-handshake

port=3306
basedir="C:/MySQL55/"
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"
#character-set-server=cp1251
character-set-server=utf8
character-set-client-handshake
character-set-filesystem = latin1

default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=0
table_cache=256
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K


#skip-innodb
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8


Connection string:
Provider=MSDASQL.1;Password="";Persist Security Info=True;User ID=root;Data Source=nodeutf8;Mode=ReadWrite;Extended Properties="DSN=nodeutf8;UID=root;PWD=;";Initial Catalog=nodeutf8

Как получить нормальный текст в комбобоксе?

P.S. Кое-что из интернета:
http://www.sql.ru/forum/actualthread.aspx?tid=679332
http://forum.vingrad.ru/topic-231204.html
http://stackoverflow.com/questions/4653430/how-to-set-charset-for-mysql-in-rodbc
http://stackoverflow.com/questions/1597768/delphi-7-personal-mysql-using-libmysql-dll-utf8
http://www.mysql.ru/webboard/index.html?n1=9105&n2=3&page=
http://forum.vingrad.ru/forum/topic-263419.html
http://www.delphimaster.net/view/3-1249649283/all
http://forum.vingrad.ru/topic-132639.html
http://www.delphimaster.net/view/2-1246706971/all
http://forum.shelek.ru/index.php/topic,12009.0.html
http://forum.mista.ru/topic.php?id=486796
http://forum.codenet.ru/threads/45511-%D0%B1%D0%B0%D0%B7%D0%B0-%D0%B2-UTF8-%D0%BA%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-ADO-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%8E-%D0%B3%D0%B4%D0%B5-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D1%83-%D0%B2-ADO
http://forum.sources.ru/index.php?showtopic=166054
http://programmersforum.ru/showthread.php?t=25637
http://www.sql.ru/Forum/actualthread.aspx?bid=6&tid=491775&hl=

Автор: Antimol 20.9.2011, 15:29
Мне помогла статья: http://androschuk.blogspot.com/2011/03/delphi-mysql.html

Автор: malor 20.9.2011, 17:29
Цитата(Antimol @  20.9.2011,  15:29 Найти цитируемый пост)
Мне помогла статья: http://androschuk.blogspot.com/2011/03/delphi-mysql.html

user posted image
Вы предлагаете из кода Delphi XE послать SET NAMES ''cp1251''?

Автор: Keeper89 20.9.2011, 17:56
Мне кажется или все-таки нужно сделать конверт UTF8->UTF16 (обычный string)?

Автор: malor 25.9.2011, 17:30
Цитата(Keeper89 @  20.9.2011,  17:56 Найти цитируемый пост)
все-таки нужно сделать конверт UTF8->UTF16 (обычный string)? 

user posted image

Переменная s объявлена:
s: String;

P.S. Какой-то DCC Warning был, наподобие:
"W1058 Implicit string cast with potential data loss from 'string' to 'RawByteString' "

Автор: Antimol 26.9.2011, 09:06
Цитата(malor @ 20.9.2011,  17:29)
...
Вы предлагаете из кода Delphi XE послать SET NAMES ''cp1251''?

Да именно так. Я следующее (Использовал компоненты ZEOS):
Код

.....
Подключаемся к БД
.....
with TZQuery.Create(nil) do // создаем Query для выполнения запроса
begin
  try
    Connection = ZConnection; //Указываем Connection для Query
    SQL.Text:='SET NAMES "cp1251"' //Явно указываем в какой кодировке работаем.
    ExecSQL; //Выполняем запрос
  finally 
    Free  //Уничтожаем Query  
  end;
end;


Общий принцип такой, может есть ошибки - пишите, исправлю. Подсмотрю дома что писал точно и выложу если кому интересно.

Автор: Akella 26.9.2011, 14:56
Цитата(Antimol @  26.9.2011,  09:06 Найти цитируемый пост)
Да именно так. 


Я уже представляю, как тексты перекодируются из UTF8 в UTF16 и обратно через промежуточную кодировку CP1251 smile 
А пофиг, главное шоб работало smile 

Автор: malor 10.10.2011, 18:21
Akella>>из UTF8 в UTF16 и обратно через промежуточную кодировку CP1251

Про CP1251 в 1-м посте не упоминалось.

В настройках Connector/ODBC есть параметры под названиями: "Character Set", "Initial Statement".

user posted image

Может они здесь играют важную роль?

О себе:
mysql-connector-odbc-5.1.9-win32.msi
mysql-5.5.16-win32.msi

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)