|
|
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
В тупике. Имеется код: #include <string.h> #include <mysql.h> #include <conio.h> #include <iostream> using namespace std; int main() { char *host = "localhost"; char *login = "root"; char* pass = "12345"; char* dbname = "test"; unsigned int port = 3306; MYSQL *conn; conn = mysql_init(NULL); if (!(mysql_real_connect(conn, host, login, pass, dbname, port, NULL, 0))) { cout << "Error"; _getch(); exit(1); } mysql_query(conn, "SET NAMES utf8 COLLATE utf8_general_ci"); cout << mysql_errno(conn); cout << mysql_error(conn); mysql_query(conn, "INSERT INTO persons(id, family, name, patronymic) VALUES (NULL, 'ABWG', 'ABWG', 'ABWG')"); cout << mysql_errno(conn); cout << mysql_error(conn); mysql_close(conn); _getch(); return 0; } До тех пор пока переменные запрос содержит латиницу: автор...VALUES (NULL, 'ABWG', 'ABWG', 'ABWG')... Функция mysql_query() выполняется успешно: Но нужно чтобы запрос состоял из кириллицы, данные должны быть на русском языке: автор...VALUES (NULL, 'АБВ', 'АБВ', 'АБВ')... Здесь функция mysql_query() перестает быть успешной: Не могу решить эту проблему уже длительное время, но она должна быть скорей решена, не знаю что делать, прошу помощи. Запросы: // успешно авторINSERT INTO persons(id, family, name, patronymic) VALUES (NULL, 'ABWG', 'ABWG', 'ABWG') // ошибка авторINSERT INTO persons(id, family, name, patronymic) VALUES (NULL, 'АБВ', 'АБВ', 'АБВ') Причем все это с клиентской стороны. Используемые настройки: Файл my.ini автор[client] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_general_ci' character-set-server=utf8 collation-server=utf8_general_ci basedir = C:\\Database\\mysql datadir = C:\\Database\\data port = 3306 log-error = errors.err При соединении к mysql (в клиенте): авторmysql_query(conn, "SET NAMES utf8 COLLATE utf8_general_ci"); Здесь подробней, если эта строка присутствует и запрос содержит кириллицу возникает ошибка(запрос не выполняется): Если строка закоментирована, несмотря на то что в запросе присутствует кириллица запрос выполняется но имеет вид: Состояние сервера и его настроек: Ребята прошу кто знает в чем проблема напишите, довольно много времени потратил и у меня его сейчас нет, но решить это нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 16:24 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
crimeperson, А у вас исходники программы в какой кодировке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 16:27 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
miksoft, Windows-1251 (через Notepad++) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 16:30 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
Создание таблицы: авторCREATE TABLE IF NOT EXISTS `persons` ( `id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `family` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `name` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `patronymic` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 16:35 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
crimepersonmiksoft, Windows-1251 (через Notepad++)Либо перекодируйте в utf-8, либо говорите MySQL, что у вас данные в кодировке 1251. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 16:53 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
miksoft, перекодировал в UTF-8, по прежнему те же проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 17:03 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
crimepersonmiksoft, перекодировал в UTF-8, по прежнему те же проблемы.Все так же говорит "Incorrect string value"? Показывайте сообщение об ошибке полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 17:06 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
miksoft, 1. На этом изображении запрос содержит кириллицу - выдает ошибку 2. Здесь тоже самое но с комментирование строки mysql_query(... Обратите внимание Notepad++ кодировка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 17:15 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
а Win-консоль то не логично работает в UTF-8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 18:14 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinov, не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 18:16 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
crimeperson, а какую вы используете кодировку в свои приложениях на С++ под windows? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 18:18 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
Alex_Ustinovа Win-консоль то не логично работает в UTF-8Да вроде к ней претензий нету, мусор же не выдает. Хотя в целом - да, если выводить что-то на консоль, то надо либо перекодировать в кодировку консоли, либо консоль переключать на другую кодировку. Поскольку мне обычно лень делать и то, и другое, то я обычно такие вещи пишу в файл :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 18:55 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
перевел полностью (СУБД, клиент) на cp1251 работает. но нужна именно utf8. Разбил запрос "SET NAMES utf8" на подзапросы: авторcharacter_set_client character_set_results character_set_connection оказывается character_set_connection генерирует ошибку (все остальные запросы работают успешно). может ли это все быть из-за того что использую libmysql.dll который поставляется вместе с mysql 5.7? всмысле может unicode не поддерживает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 07:50 |
|
||
|
Mysql query API C
|
|||
|---|---|---|---|
|
#18+
crimeperson, Разумеется, если перевести на cp1251 работать будет( надеюсь понимаете на какой ОС). libmysql.dll прекрасно работает с UTF-8. Проблема "кракозябр" в UTF-8 заключается в том, что (в частном случае) на русские буквы выделяется 2 байта,в то время как на знаки пунктуации,английский алфавит,цифры и т.д. 1 байт. Таким образом вы можете работать в utf8, у вас не будет проблем с "однобайтовыми" данными, но с кириллицей будут траблы. Для работы с "Мульти"байтовыми строками в библиотеке libmysql.dll предусмотрена функция mysql_real_query(читайте доку). Для языка С++ необходимо использовать WideCharToMultiByte и MultByteToWideChar.(Читайте доки, ищите аналоги). Если пользователи будут взаимодействовать с БД через ваше приложение, можно в конфиге MySQL поставить игнорирование кодировки пользователя и БД будет ожидать данных уже в UTF-8. Это избавит от необходимости использоваться SET NAMES и аналогов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=104&tid=1831882]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 380ms |

| 0 / 0 |
