Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: ADO Data Control + MySQL Добавлено: 21.06.07 13:19  

Автор вопроса:  Arseny | ICQ: 298826769 
Поставил ODBC коннектор, настроил...
в базе MySQL все настройки, связанные с кодировкой = cp1251

Подключаюсь через adodc, просмотр соответственно в DataGrid. Чудесно подключается, все работает, но: вместо кириллических знаков - знаки вопроса.
Данные заводил через MySQL-Front. MySQL5, VB6, Connector/ODBC
Вопрос только один: КАК?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 21.06.07 13:39
Да, вот еще: в самой проге решил поменять запись, чтобы посмотреть, как она отобразится в базе, не меняется, выдает сообщение: "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения."

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 21.06.07 22:27
там помойму в connection string кодировка указывается...

Ответить

Номер ответа: 3
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #3 Добавлено: 22.06.07 08:11
Нигде там не нашел.

Ответить

Номер ответа: 4
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #4
Добавлено: 22.06.07 11:30
нету в строке подключения ничего, по крайней мере в той, что предлагает connectionstrings.com

Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;Port=3306;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;


я тоже сейчас пыхчу над этой проблемой, уже кучу кодировок перепробовал... бред какой-то!!!

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 22.06.07 20:43
откуда уверенность что на connectionstrings.com исчерпывающая информация о строках подключения?

Поисковиками пользуйтесь лучше..

http://gentoo.ru/node/1648

Ответить

Номер ответа: 6
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #6
Добавлено: 23.06.07 10:06

cnMySql.CursorDriver = rdUseOdbc
cnMySql.Connect = "uid=root;pwd=111;charset=cp1251;server=192.168.1.2;" & _
    "driver={MySQL ODBC 3.51 Driver};database=test;dsn='myobdc';"
cnMySql.EstablishConnection


charset=cp1251 - не помогло...

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 23.06.07 10:26
при подключении SQL запросом кодировка используемая указывается, например я вот настраивалсо на UTF8:
param->m_DataBase->ExecuteSQL(_T("SET NAMES utf8";));


m_DataBase - CDataBase

Ответить

Номер ответа: 8
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #8
Добавлено: 23.06.07 23:01
кто-нибудь толком может объяснить как с этим бороться?

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 24.06.07 01:51
ппц. :( см 5-ый и/или 7-ой пост

Ответить

Номер ответа: 10
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #10 Добавлено: 24.06.07 01:55
Зачем бороться, когда можно сношаться.... программеры самые странные люди на земле: у них больше, чем у кого либо секса, и все с компом...

character_set_system=utf8
Сия переменная не изменяется вручную. не в этом ли фишка?

Ответить

Номер ответа: 11
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 24.06.07 19:45
:\
Достаточно выполнить запрос "SET NAMES utf8"

Ответить

Номер ответа: 12
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #12
Добавлено: 25.06.07 09:58
    Информация о настройке кодировок в MySQL

    Misha v.3 [27 сентября 2002]
    MySQL 3.xx

    Если у вас MySQL уже установлен, то для того, чтобы узнать default кодировку сервера, дайте команду:

    SHOW VARIABLES;

    и посмотрите значение "character_set".

    Даже если вас съели - у вас есть два выхода, и тут точно так-же: вы можете изменить кодировку, в которой происходит хранение данных и сделать так, чтобы она соответствовала кодировке ваших html документов или можете включить конвертацию данных при запросе.

    Например, если у вас default charser koi8-r, а вы хотите класть/получать данные в windows-1251, необходимо использовать следующую строку соединения:
    $SQL.connect-string[mysql://user:password@имя_хоста:номер_порта/database?charset=cp1251_koi8]

    В этом случае парсер после установления соединения с сервером MySQL будет выполнять команду SET CHARACTER SET cp1251_koi8 которая сообщает серверу, что подключившийся клиент желает, чтобы сервер отправляемые клиенту перекодировал из кодировки koi8-r в кодировку windows-1251, а принимаемые от клиента данные подвергал обратному перекодированию.

    Однако имейте ввиду, что если у вас данные хранятся в кодировке koi8, а вы их кладете в windows-1251 без указания ?charset=cp1251_koi8 то ничего хорошего не получите. При запросе вы будете получать русские буквы, причем такие же, какие клали в базу, но все серверные функции типа upper, lower, order by, group by и др. нормально работать с русскими буквами не будут.

    Так же имейте ввиду, что кодировка задается одна на сервер. Т.е. у одного MySQL сервера не может одна база быть в одной кодировке, а другая в другой. Соответственно, если этот сервер использовался уже кем-то до вас и там есть данные, то скорее всего вам не дадут поменять его кодировку по умолчанию.

    Именно это скорее всего произойдет когда вы решите воспользоваться услугами какого-либо хостинга. Там сервер уже установлен, настроен и используется большим количеством клиентов и вам нужно узнать кодировку в которой он хранит данные и при необходимости включить перекодирование при подключении...

    Еще немного про изменение default charset:
    Согласно документации MySQL, после изменения default charser вы должны запустить myisamchk -r -q для всех таблиц, иначе индексы могут остаться некорректными и вы все равно будете получать некорректные результаты в результате выполнения некоторых серверных операция.

    Теперь про чувствительность MySQL к регистру.

    Как было замечено в документации с помощью Nexus, работа MySQL со столбцами типа CHAR, VARCHAR по умолчанию не чувствительна к регистру, т.е. если у вас в таблице есть записи а, А, Б, б, В то при сортировке они вернутся в следующем порядке: аАбБВ, а SELECT DISTINCT name FROM test ORDER BY name что-то типа: а Б В

    Для того, чтобы получить результаты упорядоченными так:АБВаб (и SELECT DISTINCT ... в виде АБВаб) необходимо на столбец установить атрибут BINARY, тогда сравнение данных, хранящихся в нем будет происходить с учетом регистра.

    В заключение замечу, что все вышенаписаное есть в документации по MySQL :)

    Совсем в заключение приведу краткую инструкцию по инсталляция MySQL под Windows, она может понадобиться, если вы поставили у себя на компьютере apache + mysql для того, чтобы локально сделать сайт, а изучать документацию по MySQL вам совсем лениво (имейте ввиду, что в конце концов нежелание читать документацию выйдет вам боком)
  # Инсталлируем MySQL
  # Запускаем winmysqladmin.exe - получаем окошко Quick Setup и следуем инструкциям - при этом создается default my.ini в каталоге windows
  # Открываем в winmysqladmin закладку "variables" и видим, что character_set стоит latin1 (это и есть default character set), так-же убеждаемся, что в character_sets перечислено большое количество кодировок, в том числе необходимая вам (koi8r или cp1251).
  # Открываем закладку "my.ini Setup" и в раздел [mysqld] вписываем команду:
    default-character-set=cp1251 (если вам нужна другая кодировка - пишите ее)
  # Жмем кнопку "Save Modification" и рестартуем MySQL сервер (правой кнопкой по светофору, затем стоп, ... старт)
  # Опять идем на закладку "variables" и убеждаемся, что character_set = cp1251

    Да, чуть не забыл... Я сам проверял эту процедуру установки на MySQL версий 3.23.49 и 3.23.52. Что было раньше я к сожалению не знаю, поэтому если описаная процедура установки не работает - попробуйте скачать более новый дистрибутив MySQL.
    MySQL 4.1x

    Итак светлое будущее, о котором так долго говорили большевики наступило и появился MySQL 4.1x с поддержкой подзапросов и большего количества кодировок (в том числе с встроенной поддержкой UTF-8 и возможностью иметь разные кодировки на разные базы данных, таблицы и даже столбцы).

    В рамках этого светлого будущего в случае использования MySQL 4.1x мы почти не зависим от настроек сервера, т.к. кодировку своей БД вы можете выбрать сами.

    Начну с того что любимую команду:

    SET CHARACTER SET xyz

    и её парсерную интерпретацию в виде ?charset=xyz никто не отменял, и эта команда позволяет нам задать кодировку, в которой мы хотим получать данные от MySQL сервера.

    Следует заметить, что в MySQL 3.xx эта команда задавала направление перекодировки (и фактически существовало лишь одно значение параметра: cp1251_koi8. И например если ваши файлы хранились в koi8-r, а default кодировка MySQL сервера была win1251 вы не могли заставить сервер выдавать вам данные в удобной для вас кодировке koi8-r), а в MySQL 4.1x она задает именно кодировку в которой данные будут отправляться клиенту, и вы можете указать любую удобную вам кодировку.

    Поэтому сейчас мне кажется разумным в качестве серверной кодировки использовать UTF-8, а в качестве клиентской - кодировку, в которой вы храните файлы и использовать ?charset=кодировка_файлов в строке подключения. Почему UTF? Да потому что завтра вы захотите хранить в той же базе данных кроме русских и английских букв ещё французские/немецкие/... и вам не нужно будет ничего делать с базой данных, т.к. она уже будет готова к хранению букв на разных языках. Хотя в случае использования кодировки win1251 как кодировки вашей базы данных в общем тоже особых проблем не будет: вы сможете сделать dump вашей БД, изменить её кодировку и загрузить данные обратно. Всего-то делов.

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Ответить

Номер ответа: 13
Автор ответа:
 surecom_16



ICQ: 271602250 

Вопросов: 4
Ответов: 21
 Профиль | | #13 Добавлено: 25.06.07 10:26
Если Вы ходите к базе через ODBC, то при создании DSN укажите нужную кодировку

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам