|
Помогите победить MySQL: Illegal mix of collations | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
15.07.14
✎
11:52
|
Добрый день. Подключил используя внешние источники табличку MySQL, при этом если открываю основную форму списка этого источника - все нормально. Если настраиваю группировки в этой форме списка, получаю ошибку: http://hostingkartinok.com/show-image.php?id=868b67f719abed250ba8dd9e49d162cf.
Таблички MySQL создаю через ADO, примерно так: // Подсоединяюсь к драйверу MySQL: стр_Коннект_Скуль = "DRIVER=MySQL ODBC 3.51 Driver;UID=root;PWD=123;STMT=set character_set_results=cp1251;"; адо_Соединение_Скуль = ""; // Инициализация основного объекта ADODB.Connection. Открытие соединения. адо_Соединение_Скуль = Новый COMОбъект("ADODB.Connection"); адо_Соединение_Скуль.ConnectionString = стр_Коннект_Скуль; адо_Соединение_Скуль.Open(); адо_Соединение_Скуль.Execute("set names cp1251;"); адо_Соединение_Скуль.Execute("CREATE DATABASE IF NOT EXISTS `Price` DEFAULT CHARSET=cp1251;"); адо_Соединение_Скуль.Execute("use `Price`"); адо_Соединение_Скуль.Execute("DROP TABLE IF EXISTS `VRN_price`;"); // Формирую поля для запроса, согласно таблице соответстви стр_КолонкиИнсерта = ""; стр_ПоляЗапроса = ""; Для каждого стр_тз Из тзКолонки Цикл стр_КолонкиИнсерта = стр_КолонкиИнсерта + " | `" + стр_тз.ИдПоляСкуль + "`, "; стр_ПоляЗапроса = стр_ПоляЗапроса + " | `" + стр_тз.ИдПоляСкуль + "` " + стр_тз.ТипПоляСкуль + ","; КонецЦикла; // Собираю строку - текст запроса для создания таблицы Price: стр_СозданиеТаблицыПрайс = " |CREATE TABLE IF NOT EXISTS `VRN_price` |(" + стр_ПоляЗапроса +" | `ID` INT(15) NOT NULL AUTO_INCREMENT PRIMARY KEY | ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;"; адо_Соединение_Скуль.Execute(стр_СозданиеТаблицыПрайс); С базой из предприятия соединяюсь так: DRIVER={MySQL ODBC 3.51 Driver}; SERVER=127.0.0.1; DATABASE=Price; STMT=set character_set_results=cp1251; Я так понимаю, у меня проблема с кодировками. Но я при создании и при подключении явно указал везде cp1251. Что ей не так? |
|||
1
Лефмихалыч
15.07.14
✎
11:57
|
(0) проблема вот тут "character_set_results=cp1251"
у тебя база в latin1_swedish видимо, а не в cp1251 |
|||
2
Zhuravlik
15.07.14
✎
12:01
|
(0) Но если я эту строчку убираю, в форме списка одни вопросы. В смысле вместо строки "Производитель оборудования" вижу "???????????? ??????????".
А как ее переопределить? Плохо знаю мат. часть, не допонимаю взаимосвязи. |
|||
3
Лефмихалыч
15.07.14
✎
12:04
|
надо перед выводом как-то конверить из latin1_swedish в то, в чем выводишь. Еще можно в исходной базе поменять на человеколюбивый коллэйшн
|
|||
4
Zhuravlik
15.07.14
✎
12:14
|
(3) "Перед выводом конвертить" - я так понимаю это в платформе зашито, может конечно глупость ляпнул, но не нашел где бы могла переопределяться кодировка в внешних источниках. Можно чуть подробнее про "человеколюбивый коллэйшен" - я так понимаю, можно при создании таблиц задавать некую универсальную настройку, чтобы потом не мучиться с кодировками при чтении?
|
|||
5
Лефмихалыч
15.07.14
✎
12:25
|
(4) коллэйшн задается при создании базы. По умолчанию он наследуется от сервера. Сервер берет его из mysql.conf (или как так его?)
Короче, создай базу с CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci; и не парься. Тогда не надо будет в 1С character_set_results писать - кодировка будет совпадать и там, и тут |
|||
6
Лефмихалыч
15.07.14
✎
12:25
|
при создании таблиц CHARACTER SET и COLLATE наследуются от базы. Просто создай базу с правильными настройками
|
|||
7
Zhuravlik
15.07.14
✎
13:28
|
(5) Получилось, спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |