View Issue Details

IDProjectCategoryView StatusLast Update
0003168SAS.ПланетаБаг / Bugpublic12-01-2017 19:01
ReporterDesert Rat Assigned Tozed  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionno change required 
PlatformWindowsOS7OS VersionUltimate
Product Version.Nightly 
Summary0003168: Не работают метки в MySQL через ODBC
DescriptionПри использовании ODBC MySQL (5.1 5.2 5.3) БД создается не до конца и с ошибками. Причиной является пустой параметр имени в БД.
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, 0 INDEX_COUNT from INFORMATION_SCHEMA.COLUMNS where UPPER(TABLE_SCHEMA) = '' and UPPER(TABLE_NAME) = 'USER'

При использовании Connection String:
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, 0 INDEX_COUNT from INFORMATION_SCHEMA.COLUMNS where UPPER(TABLE_SCHEMA) = 'DRIVER={MYSQL ODBC 5.3 ANSI DRIVER};SERVER=localhost;DATABASE=SASPLANET;UID=root;PASSWORD=root;' and UPPER(TABLE_NAME) = 'USER'
Steps To Reproduce1. Установить 5.3 ODBC MySQL Driver
2. Настроить ODBC в Windows через Источник Данных ODBC
3. Включить global_log в MySQL
4. Использовать ODBC в SasPlanet
Additional InformationSET NAMES utf8
SET character_set_results = NULL
SET SQL_AUTO_IS_NULL = 0
set @@sql_select_limit=DEFAULT
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, 0 INDEX_COUNT from INFORMATION_SCHEMA.COLUMNS where UPPER(TABLE_SCHEMA) = '' and UPPER(TABLE_NAME) = 'USER'

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'USER'

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'USER'

CREATE TABLE User (ID bigint NOT NULL,uName mediumtext character set UTF8, PRIMARY KEY(ID))

select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, 0 INDEX_COUNT from INFORMATION_SCHEMA.COLUMNS where UPPER(TABLE_SCHEMA) = '' and UPPER(TABLE_NAME) = 'USER'

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'USER'

SHOW KEYS FROM `USER`
SHOW KEYS FROM `USER`
TagsNo tags attached.
Attached Files
Image 1.png (22,728 bytes)   
Image 1.png (22,728 bytes)   
Image 2.png (8,875 bytes)   
Image 2.png (8,875 bytes)   
Image 3.png (9,683 bytes)   
Image 3.png (9,683 bytes)   

Activities

zed

12-01-2017 11:42

manager   ~0017771

Last edited: 12-01-2017 11:51

У меня всё работает. Опишу подробно:

1. Установить 32-битный драйвер 5.3.7
2. Запустить сервер:

mysqld --skip-grant-tables --console --verbose --max_allowed_packet=16M
3. Создать БД:

mysql -vvvv -u root -e "CREATE DATABASE IF NOT EXISTS sasgis_marks CHARACTER SET utf8 COLLATE utf8_general_ci;"
4. В "Администрирование - Источники данных ODBC (32-разрядная версия)" добавить новый источник: "MySQL ODBC Unicode Driver" с настройками как на скриншоте "Image 1.png"
5. В SAS создать новую БД меток с настройками как на скриншоте "Image 2.png"

Сервер 5.6.26 (32-битный) на Windows 8.1 x64.

Desert Rat

12-01-2017 13:47

reporter   ~0017772

Сервер Ubuntu 14.04.1 i686. mysqld 5.5.53.

Клиенты:
Win 7 x64. Stable 160707.9476. mysql-connector-odbc-5.3.7-win32
Win 10 x64. Nightly 161222.9650. mysql-connector-odbc-5.3.7-win32

Оба клиента не могут создать правильно таблицы изза неверных запросов в SQL. SQL рабочий, так как на нем крутятся несколько сервисов. БД создавалось как указанно в прошлом комментарии. Источник данных был задан через "Источники данных ODBC". Настроено как на скриншоте.

ESQLite3Exception: Error SQLITE_ERROR (1) [Step] using 3.13.0 - TSQLRestStorageExternal.Create: TSQLUser: unable to create external missing field User.uName - SQL="ALTER TABLE User ADD uName mediumtext character set UTF8"

Если удалить поле uName, создается следующая таблица, и так же с ошибкой.

zed

12-01-2017 15:39

manager   ~0017773

> Оба клиента не могут создать правильно таблицы изза неверных запросов в SQL

Значит, при работе с MySQL 5.5.x и младше, надо использовать Connection String в настройках SAS, а не DSN.

Desert Rat

12-01-2017 16:05

reporter   ~0017774

При первом запуске создалась только таблица User и та же ошибка. При повторных другая ошибка.

Driver={MySQL ODBC 5.3 UNICODE Driver};Server=192.168.0.1;Database=sasplanet;User=root;password=root;

ESQLite3Exception: Error SQLITE_ERROR (1) [Step] using 3.13.0 - TSQLRestStorageExternal.Create: external table creation TSQLUser failed: GetFields() returned nil - SQL="User", extended_errcode=1

SET NAMES utf8
SET character_set_results = NULL
SET SQL_AUTO_IS_NULL = 0
set @@sql_select_limit=DEFAULT

select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, 0 INDEX_COUNT from INFORMATION_SCHEMA.COLUMNS where UPPER(TABLE_SCHEMA) = 'Driver={MySQL ODBC 5.3 UNICODE Driver};Server=192.168.0.1;Database=sasplanet;User=root;password=root;' and UPPER(TABLE_NAME) = 'USER'

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'USER'

Field List User
SHOW KEYS FROM `USER`
SHOW KEYS FROM `USER`
CREATE TABLE User (ID bigint NOT NULL,uName mediumtext character set UTF8, PRIMARY KEY(ID))
ALTER TABLE User ADD uName mediumtext character set UTF8
Quit

1й селект не валидный.
2й селект:
+------------+---------------+------------+--------------+
| TABLE_NAME | TABLE_COMMENT | TABLE_TYPE | TABLE_SCHEMA |
+------------+---------------+------------+--------------+
| User | | BASE TABLE | sasplanet |
+------------+---------------+------------+--------------+

SHOW KEYS FROM `USER`
Table 'sasplanet.USER' doesn't exist

Но если SHOW KEYS FROM `User'
приходит валидный результат

zed

12-01-2017 16:07

manager   ~0017775

Значит, с версией 5.5 оно вообще не работает. Тестируйте на 5.6.

Desert Rat

12-01-2017 18:43

reporter   ~0017776

Переход на 5.7 не дал результата.
А вот выставление в конфиге MySQL lower_case_table_names = 1; решил проблема.
MySQL в Linux case sensetive в отношении имен таблиц. А в Win нет.

zed

12-01-2017 19:00

manager   ~0017777

Last edited: 12-01-2017 19:01

Хорошо, что есть такая опция и плохо, что по дефолту разное поведение на разных платформах.

Добавлю ещё ссылку на доки, про чувствительность к регистру, может кому пригодится: 10.2.2 Identifier Case Sensitivity

Issue History

Date Modified Username Field Change
09-01-2017 10:34 Desert Rat New Issue
12-01-2017 11:33 zed Summary ODBC MySQL не рабочий => Не работают метки в MySQL через ODBC
12-01-2017 11:42 zed Note Added: 0017771
12-01-2017 11:42 zed File Added: Image 1.png
12-01-2017 11:43 zed File Added: Image 2.png
12-01-2017 11:44 zed Status new => feedback
12-01-2017 11:51 zed Note Edited: 0017771
12-01-2017 13:47 Desert Rat Note Added: 0017772
12-01-2017 13:47 Desert Rat Status feedback => new
12-01-2017 15:39 zed Note Added: 0017773
12-01-2017 15:39 zed File Added: Image 3.png
12-01-2017 15:40 zed Status new => feedback
12-01-2017 16:05 Desert Rat Note Added: 0017774
12-01-2017 16:05 Desert Rat Status feedback => new
12-01-2017 16:07 zed Note Added: 0017775
12-01-2017 18:43 Desert Rat Note Added: 0017776
12-01-2017 19:00 zed Note Added: 0017777
12-01-2017 19:01 zed Status new => closed
12-01-2017 19:01 zed Assigned To => zed
12-01-2017 19:01 zed Resolution open => no change required
12-01-2017 19:01 zed Note Edited: 0017777
08-08-2025 13:22 zed Category Баг => Баг / Bug