Что нового

Получение ответа от MySQL в верной кодировке

cosmos

Новичок
Сообщения
37
Репутация
0
Из БД Mysql получаю нужное мне значение. Сама таблица в utf8_general_ci, но AI не принимает и вместо слово "Привет" выдает "??????". Русский текст работает в AI, если в ручную занесу текст в переменную. В AI выставлено UTF8. Как можно исправить это? Как-нибудь может помочь ваша либа?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
cosmos [?]
Как можно исправить это? Как-нибудь может помочь ваша либа?
Библиотека ничем не поможет. При подключении к БД, Вы, вероятно, не указываете кодировку. Например SET NAMES utf8 не указан при подключении.
 
Автор
C

cosmos

Новичок
Сообщения
37
Репутация
0
Medic84 сказал(а):
Библиотека ничем не поможет. При подключении к БД, Вы, вероятно, не указываете кодировку. Например SET NAMES utf8 не указан при подключении.

Спасибо, понял. Вспомнил на PHP такую проблему.

Использую библиотеку Mysql UDF

Код:
; Инициализация библиотек
_MySQL_InitLibrary()
$MysqlConn = _MySQL_Init()


While -1

   ;~ Подключение
   If $connected = 0 Then
	   $connected = _MySQL_Real_Connect($MysqlConn,"5.45.115.159","DB","pass","ddd")
   Endif

   ;~ Получаем нужное сообщение

   $getDirectMessage = "SELECT * FROM direct WHERE user='"& $id_user &"' and status='0' and active='1'"
   _MySQL_Real_Query($MysqlConn, $getDirectMessage)


И куда бы не пытался вставить SET NAMES utf8 - выдает ошибку. Может знаете как или доки где есть полноценные по этой либе? Не могу найти.
 
Автор
C

cosmos

Новичок
Сообщения
37
Репутация
0
Garrett сказал(а):
Код:
_MySQL_Real_Query($MysqlConn, "SET NAMES 'utf8'")
_MySQL_Real_Query($MysqlConn, "SELECT * FROM direct WHERE user='"& $id_user &"' and status='0' and active='1'")

Спасибо, вот теперь такие символы выдает (это слово Привет):
vdMUsCIG8o4.jpg


Как понимаю нужно воспользоваться теперь этой либой? В БД стоит кодировка UTF8_general_ci.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
cosmos [?]
вот теперь такие символы
Такие?! :smile:
Код:
ConsoleWrite(StringToBinary('Привет!!', 4))



Добавлено:
Сообщение автоматически объединено:

cosmos
Что выдаёт такой запрос? (путь к директории character_sets_dir не нужен)
 
Автор
C

cosmos

Новичок
Сообщения
37
Репутация
0
Garrett сказал(а):
cosmos [?]
Такие?! :smile:
Код:
ConsoleWrite(StringToBinary('Привет!!', 4))



Добавлено:
Сообщение автоматически объединено:

cosmos
Что выдаёт такой запрос? (путь к директории character_sets_dir не нужен)



Вот выдает именно эти символы "Привет!!" как на скриншоте. Но если я пишу BinaryToString - выдает "тут ? ? вопросики? ?". Или на что вы намекаете?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
InnI [?]
Если файл скрипта в кодировке UTF-8, то будет "Привет!!". Если в ANSI, тогда "������!!"
ИМХО. С точностью до наоборот. Я неправильно вас понял. Разумеется. :smile:
Как я понимаю, у человека текст в базе хранится в кодировке cp1251 а сама база в кодировке utf8.


Добавлено:
Сообщение автоматически объединено:

Garrett [?]
Что выдаёт такой запрос? (путь к директории character_sets_dir не нужен)
Прошу прощения. Не пойму каким образом вчера промахнулся с вставкой кода.
Исправляю ситуацию.

Выполните запрос и отпишитесь, что выдал MySQL.
Код:
_MySQL_Real_Query($MysqlConn, "SHOW VARIABLES LIKE 'character_set%'")
 
Автор
C

cosmos

Новичок
Сообщения
37
Репутация
0
Garrett сказал(а):
Выполните запрос и отпишитесь, что выдал MySQL.
Код:
_MySQL_Real_Query($MysqlConn, "SHOW VARIABLES LIKE 'character_set%'")

Сделал такой запрос и вывел массив:

Код:
_MySQL_Real_Query($MysqlConn, "SHOW VARIABLES LIKE 'character_set%'")
   $getDirectMessage = "SELECT * FROM direct WHERE user='"& $id_user &"' and status='0' and active='1'"
   _MySQL_Real_Query($MysqlConn, $getDirectMessage)


Получил:
49Rg_jqHxyg.jpg
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
cosmos
Сдаётся мне что текст хранится в кодировке cp1251
Попробуйте такой запрос:
Код:
_MySQL_Real_Query($MysqlConn, "SET NAMES 'cp1251'")
_MySQL_Real_Query($MysqlConn, "SELECT * FROM direct WHERE user='"& $id_user &"' and status='0' and active='1'")



Добавлено:
Сообщение автоматически объединено:

Или, пишите текст в базу в кодировке utf8.
 
Автор
C

cosmos

Новичок
Сообщения
37
Репутация
0
Garrett сказал(а):
cosmos
Сдаётся мне что текст хранится в кодировке cp1251
Попробуйте такой запрос:
Код:
_MySQL_Real_Query($MysqlConn, "SET NAMES 'cp1251'")
_MySQL_Real_Query($MysqlConn, "SELECT * FROM direct WHERE user='"& $id_user &"' and status='0' and active='1'")



Добавлено:
Сообщение автоматически объединено:

Или, пишите текст в базу в кодировке utf8.




cp1251 работает. Что-то сам и не додумался просто попробовать другой формат. Спасибо большое за столько великодушную помощь! : )
 
Верх