Проблема с базой данных

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 2:48

Есть база данных в MySQL. Связь с ней осуществляется через ADO Control по драйверу ODBC MySQL 3.51, вся база находится в кодировке CP-1251.
В системе установлены следующие ключи: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\
1250 = с_1250.nls
1251 = с_1251.nls
1252 = с_1252.nls
Необходимо сделать следующий запрос к базе данных:
Код: Выделить всё
SELECT * FROM zoneautotrafs WHERE dn='сб'

(в базе есть одна такая запись, которая без труда выводится с помощью MySQLFront по этому запросу)
Значение сб берется из combolist в котором кодировка вроде как установлена на кирилицу (Шрифт Arial Cyr).
Итак вопрос, который я не нашел в поиске. Если отправить этот запрос из VB, то в результате приходит 0 записей. Если вывести данный запрос в Textbox, а затем скопировать его через буфер, то можно увидеть, что на самом деле на сервер приходит следующий запрос:
Код: Выделить всё
SELECT * from zoneautotrafs where dn='cá'

Вопрос: что это за кодировка, откуда она берется и как мне отправить запрос в CP-1251.
Пробовал поставить перед запросом:
Код: Выделить всё
set character_set_client='cp-1251'

Код: Выделить всё
set character_set_results='cp1251'

Код: Выделить всё
set collation_connection='cp1251_general_ci'

не помогло...
Заранее спасибо за помощь...

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 3:10

Кодировка вроде так задается
Код: Выделить всё
SET NAMES 'cp1251'

Код: Выделить всё
SET NAMES 'utf8'



А то, что тебе нужно наверное вот это, хотя я не уверен. эти mysql-драйвера кривые шо ппц
Код: Выделить всё
SELECT * FROM zoneautotrafs WHERE CONVERT(dn  USING utf8)='сб'

dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Re: Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 3:32

Код: Выделить всё
SELECT * FROM zoneautotrafs WHERE CONVERT(dn  USING utf8)='сб'

не помогает, он даже не работает в MySQLFront и выводит 0 записей.
также пробовал:
Код: Выделить всё
SELECT * FROM zoneautotrafs WHERE CONVERT(dn  USING cp1251)='сб'

не работает - 0 записей.
Код: Выделить всё
SET NAMES utf8

и

Код: Выделить всё
SET NAMES cp1251

ничего не меняют. :(

dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Re: Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 9:16

Мне кажется проблема в том, что кодировка в комбо не совпадает с кодировкой в базе CP-1251. Само же значение комбо присваивается из програмного кода, который тоже Courier New Cyr. В какой кодировке VB присваивает значение комбо и как ее перевести в Windows-1251?

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 10:42

Может конечно у тебя Basic не UTF8, но что-то я очень сомневаюсь, покажи код где задаешь кодировку и запрос, строку подключения, а также полистай
http://dev.mysql.com/doc/refman/5.1/en/ ... ction.html, покажи что у тебя выводит Show Variables в MysqlFront

dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Re: Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 11:31

Вот вывод:
Show Variables


Код: Выделить всё
auto_increment_increment   1
auto_increment_offset   1
automatic_sp_privileges   ON
back_log   50
basedir   \usr\local\mysql5\
binlog_cache_size   32768
bulk_insert_buffer_size   8388608
character_set_client   cp1251
character_set_connection   cp1251
character_set_database   cp1251
character_set_filesystem   binary
character_set_results   cp1251
character_set_server   cp1251
character_set_system   utf8
character_sets_dir   \usr\local\mysql5\share\charsets\
collation_connection   cp1251_general_ci
collation_database   cp1251_general_ci
collation_server   cp1251_general_ci
completion_type   0
concurrent_insert   1
connect_timeout   5
datadir   \usr\local\mysql5\data\
date_format   %Y-%m-%d
datetime_format   %Y-%m-%d %H:%i:%s
default_week_format   0
delay_key_write   ON
delayed_insert_limit   100
delayed_insert_timeout   300
delayed_queue_size   1000
div_precision_increment   4
engine_condition_pushdown   OFF
expire_logs_days   0
flush   OFF
flush_time   1800
ft_boolean_syntax   + -><()~*:""&|
ft_max_word_len   84
ft_min_word_len   4
ft_query_expansion_limit   20
ft_stopword_file   (built-in)
group_concat_max_len   1024
have_archive   YES
have_bdb   NO
have_blackhole_engine   YES
have_compress   YES
have_crypt   NO
have_csv   NO
have_dynamic_loading   YES
have_example_engine   NO
have_federated_engine   YES
have_geometry   YES
have_innodb   DISABLED
have_isam   NO
have_merge_engine   YES
have_ndbcluster   NO
have_openssl   DISABLED
have_ssl   DISABLED
have_query_cache   YES
have_raid   NO
have_rtree_keys   YES
have_symlink   YES
hostname   note
init_connect   set names cp1251
init_file   
init_slave   
innodb_additional_mem_pool_size   1048576
innodb_autoextend_increment   8
innodb_buffer_pool_awe_mem_mb   0
innodb_buffer_pool_size   8388608
innodb_checksums   ON
innodb_commit_concurrency   0
innodb_concurrency_tickets   500
innodb_data_file_path   
innodb_data_home_dir   
innodb_doublewrite   ON
innodb_fast_shutdown   1
innodb_file_io_threads   4
innodb_file_per_table   OFF
innodb_flush_log_at_trx_commit   1
innodb_flush_method   
innodb_force_recovery   0
innodb_lock_wait_timeout   50
innodb_locks_unsafe_for_binlog   OFF
innodb_log_arch_dir   
innodb_log_archive   OFF
innodb_log_buffer_size   1048576
innodb_log_file_size   5242880
innodb_log_files_in_group   2
innodb_log_group_home_dir   
innodb_max_dirty_pages_pct   90
innodb_max_purge_lag   0
innodb_mirrored_log_groups   1
innodb_open_files   300
innodb_rollback_on_timeout   OFF
innodb_support_xa   ON
innodb_sync_spin_loops   20
innodb_table_locks   ON
innodb_thread_concurrency   8
innodb_thread_sleep_delay   10000
interactive_timeout   28800
join_buffer_size   131072
key_buffer_size   16384
key_cache_age_threshold   300
key_cache_block_size   1024
key_cache_division_limit   100
language   \usr\local\mysql5\share\english\
large_files_support   ON
large_page_size   0
large_pages   OFF
lc_time_names   en_US
license   GPL
local_infile   ON
log   OFF
log_bin   OFF
log_bin_trust_function_creators   OFF
log_error   \usr\local\mysql5\data\note.err
log_queries_not_using_indexes   OFF
log_slave_updates   OFF
log_slow_queries   OFF
log_warnings   1
long_query_time   10
low_priority_updates   OFF
lower_case_file_system   ON
lower_case_table_names   2
max_allowed_packet   1047552
max_binlog_cache_size   4294967295
max_binlog_size   1073741824
max_connect_errors   10
max_connections   100
max_delayed_threads   20
max_error_count   64
max_heap_table_size   16777216
max_insert_delayed_threads   20
max_join_size   4294967295
max_length_for_sort_data   1024
max_prepared_stmt_count   16382
max_relay_log_size   0
max_seeks_for_key   4294967295
max_sort_length   1024
max_sp_recursion_depth   0
max_tmp_tables   32
max_user_connections   0
max_write_lock_count   4294967295
multi_range_count   256
myisam_data_pointer_size   6
myisam_max_sort_file_size   2147483647
myisam_recover_options   OFF
myisam_repair_threads   1
myisam_sort_buffer_size   8388608
myisam_stats_method   nulls_unequal
named_pipe   OFF
net_buffer_length   2048
net_read_timeout   30
net_retry_count   10
net_write_timeout   60
new   OFF
old_passwords   ON
open_files_limit   500
optimizer_prune_level   1
optimizer_search_depth   62
pid_file   \usr\local\mysql5\data\note.pid
port   3306
preload_buffer_size   32768
profiling   OFF
profiling_history_size   15
protocol_version   10
query_alloc_block_size   8192
query_cache_limit   1048576
query_cache_min_res_unit   4096
query_cache_size   0
query_cache_type   ON
query_cache_wlock_invalidate   OFF
query_prealloc_size   8192
range_alloc_block_size   2048
read_buffer_size   258048
read_only   OFF
read_rnd_buffer_size   258048
relay_log_purge   ON
relay_log_space_limit   0
rpl_recovery_rank   0
secure_auth   OFF
secure_file_priv   
shared_memory   OFF
shared_memory_base_name   MYSQL
server_id   1
skip_external_locking   ON
skip_networking   OFF
skip_show_database   OFF
slave_compressed_protocol   OFF
slave_load_tmpdir   \tmp\
slave_net_timeout   3600
slave_skip_errors   OFF
slave_transaction_retries   10
slow_launch_time   2
sort_buffer_size   65528
sql_big_selects   ON
sql_mode   
sql_notes   ON
sql_warnings   OFF
ssl_ca   
ssl_capath   
ssl_cert   
ssl_cipher   
ssl_key   
storage_engine   MyISAM
sync_binlog   0
sync_frm   ON
system_time_zone   
table_cache   4
table_lock_wait_timeout   50
table_type   MyISAM
thread_cache_size   0
thread_stack   131072
time_format   %H:%i:%s
time_zone   SYSTEM
timed_mutexes   OFF
tmp_table_size   33554432
tmpdir   /tmp
transaction_alloc_block_size   8192
transaction_prealloc_size   4096
tx_isolation   REPEATABLE-READ
updatable_views_with_limit   YES
version   5.0.45-community-nt
version_comment   MySQL Community Edition (GPL)
version_compile_machine   ia32
version_compile_os   Win32
wait_timeout   28800


В VB код примерно выглядит так:
'
Код: Выделить всё
в form-load
combo4.additem "сб"
........

в combo4_click:
Adodc1.RecordSource = "set character_set_client='cp1251'"
Adodc1.Refresh
Adodc1.RecordSource = "set character_set_results='cp1251'"
Adodc1.Refresh
Adodc1.RecordSource = "set collation_connection='cp1251_general_ci'"
Adodc1.Refresh
stquery = "SELECT * FROM zoneautotrafs WHERE (zoneid=4 AND dn='" & combo4 & "')"
Adodc1.RecordSource = stquery
adodc1.refresh


Понимаю, что криво, но извините я с ADO вообще недавно.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 12:23

в строке подключения charset задаешь?

dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Re: Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 13:24

Нет, не задавал.
Здесь есть проблема, в драйвере ODBC MySQL 3.1 при задании charset вылетает:
Код: Выделить всё
[MySQL][ODBC 3.51 Driver]Can't initialize character set cp1251 (path: C:\mysql\\share\charsets\)

Пробовал обойти включением в Initial Statement ODBC MySQL строки
Код: Выделить всё
SET charset cp1251

вроде все работает, но при запросе опять выдает 0 строк, хотя из MySQLFront - 1 строка.
Мне кажется дело в том, что данные на сервер приходят в 1251 кодировке, но на месте 'сб' появляются крокозябры, а именно: 'cá'. Никак не представлю, что здесь можно поделать.
Отмечу, что если дело не касается кирилицы, то тот же запрос из VB работает идеально.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 13:28

Из VB данные приходят в UTF8, что-то из перечисленного не правильно делаешь

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с базой данных

Сообщение alibek » 04.06.2009 (Чт) 14:02

arvitaly писал(а):Из VB данные приходят в UTF8

С чего бы?
Lasciate ogni speranza, voi ch'entrate.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 14:05

С чего бы?


Не знаю просто так есть

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с базой данных

Сообщение alibek » 04.06.2009 (Чт) 14:13

Зачем ты обманываешь?
VB6 никогда UTF не поддерживал.
Lasciate ogni speranza, voi ch'entrate.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 14:22

Зачем ты обманываешь?
VB6 никогда UTF не поддерживал.


Я же говорю не знаю, просто у меня есть mysql с кодировкой cp1251, и при подключении из VB приходится конвертировать из UTF8, может драйвер конечно так работает или Adodc

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Проблема с базой данных

Сообщение alibek » 04.06.2009 (Чт) 14:27

Ты видимо путаешь Unicode и UTF8.
Lasciate ogni speranza, voi ch'entrate.

arvitaly
Постоялец
Постоялец
 
Сообщения: 485
Зарегистрирован: 12.04.2009 (Вс) 0:30
Откуда: Казань

Re: Проблема с базой данных

Сообщение arvitaly » 04.06.2009 (Чт) 14:37

Ты видимо путаешь Unicode и UTF8.

Может быть и путаю, однако при кодировке из utf8 все работает - поэтому сделал такой вывод.

dcdlab
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 04.06.2009 (Чт) 2:14

Re: Проблема с базой данных

Сообщение dcdlab » 04.06.2009 (Чт) 15:40

Не понятно, что и где конвертировать... еще в VB или уже на сервере, какая тогда должна быть клиентская кодировка. Неужели никто не сталкивался с данной проблемой?


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList