SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.05.2016 17:06:18

Mizantrop_LoL
Участник
Зарегистрирован: 02.05.2016
Сообщений: 3

Иероглифы вместо русских символов

Здравствуйте. Да, знаю, что на эту тему есть огромное множество тем на разных форумах и статей, но перерыв это все, я все-таки решил обратиться за помощью.

Поставил себе MySQL. При настройке сервера указал кодировку utf-8, однако после выполнения такого скрипта:

DROP TABLE IF EXISTS
    Vendors;
   
CREATE TABLE Vendors
(
    No INTEGER(3),  
    Region VARCHAR(20),  
    Crops VARCHAR(12),  
    Farm VARCHAR(25),
    Director VARCHAR(30) PRIMARY KEY,
    Contacts VARCHAR(15)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
 
INSERT INTO Vendors VALUES (1,'Кировоградская обл', 'Просо','Александрия','Прилуцкая М.В.', '80503695621');


делая

SELECT * FROM vendors;


получаю кракозябры вместо строк. Пробовал сначала вызывать cmd, там делать chcp 65001 (где-то нагуглил, что это страница с utf-8), после чего запускать MySQL Command Line Client и делать вышеперечисленные действия. Кракозябры поменялись, но все равно остаются кракозябрами.

SHOW VARIABLES LIKE 'character%'


выводит utf-8 везде, кроме файловой системы (там binary, но так вроде и должно быть).
Так же пробовал использовать MySQL C Connector. Та же фигня. Думал, что проблема в невосприимчивости консоли к такой кодировке. Сделал небольшую программку в CodeBlocks с wxWidgets с поддержкой Unicode (подключение, селект и вывод значений в грид) - те же самые кракозябры.

Во многих аналогичных темах по php пишут делать что-то типа такого:

mysql_set_charset('utf8');


Я делаю вроде как аналогично в С:

system("chcp 65001");
mysql_set_character_set(&mysql, "utf8");
    mysql_query(&mysql, "SET NAMES utf8");


Так же, при попытке сделать запрос с созданием строки не из файла, а вручную (в консольку) - ругается на русские символы и выводит их в виде двухбайтных 16-ричных чисел, хотя при загрузке с файла все проходит отлично и при вводе в саму консоль отображает все символы (кроме украинской "і", которая отображается в виде вопросительного знака) нормально.

Надеюсь, кто-то сможет подсказать, что можно сделать с этой бедой.
Версия MySQL - 5.5.

Неактивен

 

#2 02.05.2016 17:24:27

Mizantrop_LoL
Участник
Зарегистрирован: 02.05.2016
Сообщений: 3

Re: Иероглифы вместо русских символов

Чисто случайно нашел проблему. Ради эксперимента делал запросы с разными кодировками и как оказалось, данные были в cp866, что как-то непонятно, ибо файл в котором хранились скрипты был перекодирован и с тех пор хранит данные в UTF-8 (судя по тому, что говорит Notepad++). Вопрос теперь в том, как эту проблему решить? Перед заносом данных из файла делал дроп таблицы и set names utf8.

Отредактированно Mizantrop_LoL (02.05.2016 17:28:46)

Неактивен

 

#3 02.05.2016 17:49:46

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Иероглифы вместо русских символов

Если консоль была в cp866, то перед вставкой данных нужно выполнить SET NAMES cp866. В таблице все будет в utf8, так как она определена как utf8, а SET NAMES для того, чтобы указать в каком формате консоль.

Неактивен

 

#4 02.05.2016 19:03:49

Mizantrop_LoL
Участник
Зарегистрирован: 02.05.2016
Сообщений: 3

Re: Иероглифы вместо русских символов

Ага, понял. Благодарю.
А почему теперь при загрузке с файла ругается на превышение размера поля при инсерте, но если скопировать запрос и вставить в консольку - он отлично проходит?

Неактивен

 

#5 02.05.2016 19:06:02

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Иероглифы вместо русских символов

Ругаться будет, если Вы передаете utf8 под видом cp866. Нужно, чтобы кодировка передаваемых символов и параметр SET NAMES совпадали.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson