Обсуждение статьи "Работа с СУБД MySQL из MQL5 (MQL4)" - страница 10

 
Eugeniy Lugovoy #:
Это ошибка генерируется MySQL, решение смотрите https://stackoverflow.com/questions/49194719/authentication-plugin-caching-sha2-password-cannot-be-loaded
Спасибо. Рекомендация сработала.
 
Eugeniy Lugovoy #:

Версия 3.0 включает работу с UTF-8

Мне возвращает знаки вопроса, вместо кириллицы

part DDL table:

ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

тип column -> text (не varchar)

MT4 dll:

MQLMySQL v3.0 x32 Copyright © 2014-2019, FxCodex Laboratory
 
Viktor Vasilyuk #:

Мне возвращает знаки вопроса, вместо кириллицы

part DDL table:

тип column -> text (не varchar)

MT4 dll:

UTF8 идет двухбайтный, классический, так сказать, у вас используется четырехбайтный при определении таблицы. Скорее всего в этом проблема. Тип Text на уровне драйвера MySQL не отличается от varchar.
 
Viktor Vasilyuk #:

Мне возвращает знаки вопроса, вместо кириллицы

part DDL table:

тип column -> text (не varchar)

MT4 dll:

Но я проверю как появится возможность
 
Eugeniy Lugovoy #:
UTF8 идет двухбайтный, классический, так сказать, у вас используется четырехбайтный при определении таблицы. Скорее всего в этом проблема. Тип Text на уровне драйвера MySQL не отличается от varchar.

спасибо за уточнение. Абсолютно все знать не могу, поетому и спрашиваю.

Решение для себя нашел тут.

P.S: Проверил для SELECT - работает

Convert output of MySQL query to utf8
Convert output of MySQL query to utf8
  • 2013.04.17
  • orezvani orezvani 3,515 8 8 gold badges 43 43 silver badges 55 55 bronze badges
  • stackoverflow.com
but I want the mysql to return the in utf8 encoding. Is it any function in mysql to do such task? What is that?
 
Viktor Vasilyuk #:

спасибо за уточнение. Абсолютно все знать не могу, поетому и спрашиваю.

Решение для себя нашел тут.

P.S: Проверил для SELECT - работает

Ну конверт результата запроса допустимо, однако не забывайте что у вас определение utf8mb4 на уровне таблицы, то есть для всех полей varchar по умолчанию будет использоваться, и если у вас в запросе будет условие по текстовому полю, то MySQL попытается неявно преобразование выполнить. А если принять во внимание что у вас по текстовому столбцу может быть построен индекс, то оптимизатор может его не подхватить при таком преобразовании… отсюда вытекут проблемы с производительностью запросов. 
Так что желательно контролировать такие вещи как на уровне таблицы, так и на уровне определения столбцов.
 
Eugeniy Lugovoy #:
Ну конверт результата запроса допустимо, однако не забывайте что у вас определение utf8mb4 на уровне таблицы, то есть для всех полей varchar по умолчанию будет использоваться, и если у вас в запросе будет условие по текстовому полю, то MySQL попытается неявно преобразование выполнить. А если принять во внимание что у вас по текстовому столбцу может быть построен индекс, то оптимизатор может его не подхватить при таком преобразовании… отсюда вытекут проблемы с производительностью запросов. 
Так что желательно контролировать такие вещи как на уровне таблицы, так и на уровне определения столбцов.

там поле description. Что-то на подобие "комментарии", поле не обязательно, просто текстовое обьяснение. Индекса не будет.

MySQL utf8mb4 делает по умолчанию. Скажите, как лучше указать в DDL в следующий раз? что менять и на какую кодировку

 

Можно както узнать количество Fields которые можно получить после MySqlCursorFetchRow ? 

Может какаято функция скрытая есть типа RowFieldsSize ...


Как я понял, если Field нету, то MySqlGetFieldAsString возвращается пустота. Но и если String Field специально содержит пустоту, то тоже возвращается пустота. Т.е. не всегда можно самому отследить количество Fields перебором. 


Как костыль можно узнать через sql команду сначала, но потом опять select делать, но это уже лишний Select.



Просим развивать библиотеку , очень полезная штука. Конечно давно пара mysql встроить в mt

 

Insert и Update query - только 16 кб лимит запроса ?


Если в запросе больше 16.000 символов то метатрейдер падает ( закрывается ). если меньше то норм.

Прикрепляю пример UPDATE за 32.000 символов


Поле для обновления в базе - LONGTEXT

Файлы:
test2.txt  64 kb
 
andreysneg #:

Insert и Update query - только 16 кб лимит запроса ?


Если в запросе больше 16.000 символов то метатрейдер падает ( закрывается ). если меньше то норм.

Прикрепляю пример UPDATE за 32.000 символов


Поле для обновления в базе - LONGTEXT

Это больше похоже на лимит размера строки в MQL :-(

и можно компактнее написать :

REPLACE d1 ("t","o","h","l","c") VALUES (time1,open1,high1,low1,close1), (time2,open2,high2,low2,close2) ....

и/или разбить на два запроса, объединив в одну транзакцию