MySql и UTF8 и много чего ещё...

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

10 июн 2005, 14:27

Люди научите.
Скачал недавно MySQL 4.1.12a. Там говориться что чарсет может быть UTF8. Мне он надо чтоб поддерживать кирилицу.
Вроде в конфигурации поставил по умолчанию UTF8 и в my.ini
default-character-set=utf8 стоит. Но когда mysql_character_set_name вызываю возвращает latin1. Вопрос:
как из приложения вставлять вынимать из базы кирилицу, т.е. UTF8.
Мот ещё кто знает какие способы как это сделать. Мот через API MyODBC будет работать, кароче хелп.
Потомучто когда вставляешь то в MySQL видишь ????, вопросы видишь и когда извлекаешь короче КАК мне это сделать. :?: :?:
как работать из приложения с UTF8.
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

11 июн 2005, 02:01

mysql_character_set_name возвращает default character set для текущей коннекции, а --default-character-set устанавливает default character set для сервера. Я думаю проблема в этом.
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

11 июн 2005, 02:03

Подробнее читай здесь
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

11 июн 2005, 11:17

да лано в принципе какая разница что она возвращает , мне надо просто из приложения туда и обратно вынимать кирилицу причём я уже не первый день занимаюсь всякой ерундой, как то вставляю вынимаю разл. способами эту кирилицу . Как итог но вообще ничего невстовляет то вопросы. Даже базу данных создал и явно указал что будет UTF8, но когда преобразую то всё равно вапросы получаются.
например есть 4 поля ID,NAME,SEX,AGE вставляю так:

Код: Выделить всё

	SQLINTEGER id;
	char  name[30];
	SQLINTEGER age;
	SQLCHAR sex;

	SQLBindParameter(hstmt,1,SQL_PARAM_INPUT, SQL_C_LONG,
                              SQL_INTEGER, 0,0, &id, 0, NULL);
	SQLBindParameter(hstmt,2,SQL_PARAM_INPUT, SQL_C_TCHAR,
                              SQL_VARCHAR, 0,0, name, 0, NULL);
	SQLBindParameter(hstmt,3,SQL_PARAM_INPUT, SQL_C_TCHAR,
                              SQL_CHAR, 0,0, &sex, 0, NULL);
	SQLBindParameter(hstmt,4,SQL_PARAM_INPUT, SQL_C_LONG,
                              SQL_INTEGER, 0,0, &age, 0, NULL);
						
			  sex= 'm';
			  int num = 0;
 			  WCHAR	names[30];
		           wcscpy(names,L"йцу");
			  const int nSize = sizeof(names)/sizeof(WCHAR); 
			  char szText[nSize + 1] = "";
        WideCharToMultiByte(CP_UTF8, 0, names, -1, szText, nSize, NULL,   NULL); 
			  strcpy(name,szText);
			  age = 12;
			  for (id = num; id < num +10 ;id++)
			 {
				  retcode = SQLExecute(hstmt);
			 }

Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

11 июн 2005, 11:56

Каким запросом ты создал БД и таблицу? Пробовал ли ты вставлять в БД записи с русскими значениями полей из консоли и там же выбирать их select'ом? Если нет, то для начала я бы посоветовал сделать это и в случае неудачи добиться, чтобы именно из консоли все работало отлично.
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

11 июн 2005, 11:57

Alezis писал(а):да лано в принципе какая разница что она возвращает
Разница в принципе небольшая, а именно будет ли работать твое приложение или нет... :wink:
Alezis
Сообщения: 98
Зарегистрирован: 16 авг 2004, 01:10
Откуда: Минск
Контактная информация:

11 июн 2005, 17:59

Yurich писал(а):
Alezis писал(а):да лано в принципе какая разница что она возвращает
Разница в принципе небольшая, а именно будет ли работать твое приложение или нет... :wink:
Вообще то mysql_character_set_name только использовал как индикатор проблемы и только, пускай оно себе и не возвращает то что надо главное чтоб работало. Ну да лано зарываю топор вражды извинте если чем обидел. Я здесь просто для того чтоб сказать что уменя всё заработало но об этом потом. Ещё один момент.
Каким запросом ты создал БД и таблицу? Пробовал ли ты вставлять в БД записи с русскими значениями полей из консоли и там же выбирать их select'ом? Если нет, то для начала я бы посоветовал сделать это и в случае неудачи добиться, чтобы именно из консоли все работало отлично.
Всё это делал и кодировки ставил и koi8r и всякие другие, в том числе и UTF8. если стояла utf8 то всё вставлялось и отображалось, нов консоли были всё равно ????. Оказалось просто напросто что
для русских букв тестирование через command line не подходит, т.к. там используются DOS-кодовые таблицы. поэтому и выдавалось ???.Посмотрел через MySQL Query Browser всё в поряде всё стоит русское.
Так теперь о том как это получилось:
просто создал бд с utf8.
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
create database db_name character set utf8.
а потом просто
вставлял строку переведённую в UTF8 с помощью
WideCharToMultiByte(CP_UTF8, 0, names, -1, szText, nSize, NULL, NULL)]Yurich[/b] что делился предложениями. Тема закрыта.
Ответить