VBA + MySQL и UTF8

Программирование на Visual Basic for Applications
m0n5tr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 19.08.2011 (Пт) 17:55

VBA + MySQL и UTF8

Сообщение m0n5tr » 22.08.2011 (Пн) 13:27

Есть макрос в Excel 2003(SP3), конектится через ADODB с MySQL 5.1. Всё отлично работает пока не встречается "не английский" текст.
всё в mysql хранится в utf8
как только я пытаюсь записать в базу русский текст, сразу ошибка. "Драйвер ODBC не поддерживает требуемые свойства."

Код: Выделить всё
    Dim Cnn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim Cmd As ADODB.Command
    Set Cnn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    Set Cmd = New ADODB.Command

    Cnn.ConnectionString = strConn
    Cnn.Open
    Cmd.ActiveConnection = Cnn
    name = "рус"
    q = "insert into test(name) values ('" & name & "');"   
    Rs.Open q, Cnn, adOpenKeyset, adLockPessimistic


пробовал ставить сразу после подключения к базе:
Cmd.CommandText = "SET NAMES 'utf8';"
и так тоже:
Cmd.CommandText = "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';"
и strConn разные варианты пробовал:
strConn = "DRIVER=MySQL ODBC 5.1 Driver;SERVER=localhost;DataBase=x;UID=x;PWD=x;"
strConn = "DRIVER=MySQL ODBC 5.1 Driver;SERVER=localhost;DataBase=x;UID=x;PWD=x;charset=cp1251;"
strConn = "DRIVER=MySQL ODBC 5.1 Driver;SERVER=localhost;DataBase=x;UID=x;PWD=x;charset=utf8;"

ничего не менялось. "Драйвер ODBC не поддерживает требуемые свойства." если не не только английский текст в name.

вспомнил про команду для перевода в UTF:
name= StrConv(name, vbUnicode)

если кроме русских букв больше ничего не передавать, то работает. если пробел или цифры или английские буквы добавить в name, то ошибка. "Драйвер ODBC не поддерживает требуемые свойства."

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

m0n5tr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 19.08.2011 (Пт) 17:55

Re: VBA + MySQL и UTF8

Сообщение m0n5tr » 25.08.2011 (Чт) 9:42

ни у кого идей нет?

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

Re: VBA + MySQL и UTF8

Сообщение alibek » 25.08.2011 (Чт) 11:26

Ты уверен, что кодировка базы и таблиц — UTF?
Lasciate ogni speranza, voi ch'entrate.

m0n5tr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 19.08.2011 (Пт) 17:55

Re: VBA + MySQL и UTF8

Сообщение m0n5tr » 26.08.2011 (Пт) 9:18

вот как то так:

Код: Выделить всё
mysql> show variables like "char%";
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+




UPD1:
вот если выбрать БД, то почему то сразу character_set_database = latin1
походу вот где проблемка то у меня...

Код: Выделить всё
mysql> use mydb
Database changed
mysql> show variables like "char%";
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+



UPD2:
удалил БД, создал занаво БД. Проблема решена без set names или set char%, и без StrConv
mysql как то странно выбирает кодировки для БД. от чего зависит так и не понял (так как от конфиг файла походу не всё зависит, там то нет latin1 незакомментированного вообще нигде).

alibek, спасибо! заставил перепроверить ))


Вернуться в VBA

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

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

    TopList  
cron