Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > проблема с кодировками


Автор: charodej 16.7.2008, 17:05
Извините, если такая проблема уже обсуждалась, но я не нашел объяснения на вашем форуме
У меня не отображаются некоторые символы некоторых алфавитов, например ß (эсцет) в немецком, специфические символы польского алфавита, не отображаются в MySQL CommandLine Tool, кодировка базы - utf8, кодировка клиента, сервера, подключения - utf8,вместо символов -  знаки вопросов, хотя я менял и ставил cp852, cp1250(на этих cp живут польские символы), всё равно отображаются неверные символы... Помогите... 

Автор: MuToGeN 16.7.2008, 17:16
Какая ОС?

Автор: Feldmarschall 16.7.2008, 17:31
что значит "менял и ставил"? где менял и что ставил?
кодировка выводимых символов зависит от кодировки самой консоли. можно поменять её. можно - кодировку вывода из базы. 

Автор: charodej 17.7.2008, 11:33
ОС - Windows XP, менял и ставил кодировку консоли, кодировку базы, кодировку соединения
Ну то есть вопрос сводится к тому, как мне отобразить в консоли польские символы... ą ć ł ż ż

Автор: skyboy 17.7.2008, 11:57
лучше всего расписать последовательность. шрифт, используемый для консоли, выполнение chcp в консоли, set names при первом обращении  к БД, результат show create table и пример запроса.

Добавлено через 40 секунд
Цитата(charodej @  17.7.2008,  10:33 Найти цитируемый пост)
Ну то есть вопрос сводится к тому, как мне отобразить в консоли польские символы... ą ć ł ż ż

кстати говоря, просто, без базы, ты можешь эти символы вводить в консоли и видеть их?

Автор: charodej 17.7.2008, 12:03
Нет, в том и дело, если не брать в расчет базу, как мне отобразить в консоли эти символы
Код

Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\Documents and Settings\pavsenin>chcp 1250
Active code page: 1250

C:\Documents and Settings\pavsenin>cd c:\sermysql5\bin

C:\sermysql5\bin>mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N
O)

C:\sermysql5\bin>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 59
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> set names cp1250;
Query OK, 0 rows affected (0.02 sec)

mysql> use dbtest;
Database changed
mysql> show create table t1;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------+
| Table | Create Table

                                |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `col1` char(25) default NULL,
  `col2` varchar(25) default NULL,
  `col3` tinytext,
  `col4` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------+
1 row in set (0.03 sec)

mysql> select * from t1;
+----+---------------------------+---------------------------+--------+---------
-----------------------------+
| id | col1                      | col2                      | col3   | col4
                             |
+----+---------------------------+---------------------------+--------+---------
-----------------------------+
|  1 | ąąąąą                     | ćććććć                    | łłłłłł | żżżżżżż
                             |
|  1 | aaaaa                     | ccccc                     | zzzzz  | lllll
                             |
|  1 | ććććć                     | łłłłł                     | ąąąąą  | żżżżż
                             |
|  1 | x69x69x69                 |                           |        |
                             |
|  1 | qwertasdfgzxcvbyuiophjkln | łłłłł                     | ąąąąą  | żżżżż
                             |
|  1 | qwertasdfgzxcvbyuiophjkln | łłłłł                     | ąąąąą  | żżżżż
                             |
|  1 |                           | qwertasdfgzxcvbyuiophjkln | łłłłł  | ąąąąą
                             |
|  1 |                           |                           |        | qwertasd
fgzxcvbyuiophjklnmęąśżźć€ółń |
+----+---------------------------+---------------------------+--------+---------
-----------------------------+
8 rows in set (0.00 sec)

mysql>


только нужные буковки не отображаются верно
а шрифт был стандартный, Raster Fonts? может потому что в нем нет таких символов

Автор: Feldmarschall 17.7.2008, 12:55
Да, кстати. Выбери Lucida Console

Автор: charodej 17.7.2008, 13:52
 smile Выбрал, отображаются всем  smile 

Автор: charodej 17.7.2008, 17:28
Уважаемые участники форума, прошу помочь мне с одной проблемой:

ОС - Windows XP
СУБД - MySQL

Создаю базу:

Код

mysql> show create database dbtest;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| dbtest   | CREATE DATABASE `dbtest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.04 sec)


В ней таблицу:

Код

mysql> show create table t1;
+-------+--------------------------------------------------------------------+
| Table | Create Table                                               |
+-------+--------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
        `id` int(11) default NULL,
            `column1` text
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8                                 
+-------+--------------------------------------------------------------------+
1 row in set (0.02 sec)


И вставляю содержащую ПОЛЬСКИЕ символы строку:

Код

/*Нужно прописать так, иначе строка не вставляется*/
mysql> set names cp1250;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values (1, 'ąążżłł');
Query OK, 1 row affected (0.01 sec)


После этого пишу приложение на С#, извлекающее данные из базы

Строка подключения:
"Driver={MySQL ODBC 3.51 Driver};Server=ХХХХХ;Port=12345;Database=dbtest;User ID=root;Password=ХХХХХ;Option=3;"

Перед извлечением данных из базы выполняю команду SET NAMES utf8;(из С# при помощи OdbcCommand)

Далее извлекаю данные и получаю: 

id    column1
 1    Д…Д…ЕјЕјЕ‚Е‚

Если перед извлечением выполнить SET NAMES cp1250;

То данные другие:

id    column1
 1    №№їїіі

Шрифт польские символы поддерживает...

Каким образом можно добиться верного отображения символов?

Заранее премного благодарен...

Автор: Feldmarschall 17.7.2008, 20:22
Для начала надо убедиться, что все вставилось нормально.
Можно проверить и в cp1250 в консоли, и в utf8 (сделав chcp 65001)
Если в консоли все выводится правильно, то надо заниматься с программой.
в том же ли соединении происходит запрос set names?
попробуй задампить строку в шестнадцатеричный вид и сравнить с эталоном

Автор: connector 27.7.2008, 11:48
Подскажите плз.. вопрос, многим покажется детским, просто я в базах новичок.. В общем дело в том, что у меня не корректно заносятся(собсна, как и выводятся) данные в русском алфавите из пхп-скриптом из баз. Пробовал в phpMyAdmin'e менять кодировки(cp1250, utf8, cp1251) базы, таблиц, результат всегда один - буквы записываются в виде '?'. Хотя при записи phpMyAdmin'ом в базу, заносятся корректно, но скриптом извлекаются тоже как '?'. Думаю, проблема, по большому счёту, в хостинге, т.к. на локальном хосте с этим же скриптом тестировал -  всё норма и без заморочек. Всё это дело было на бесплатном хостинге(hostmonster.org.ua), так вот, сегодня перехожу на платный(hostlife.net), есть ли вероятность, что эта лажа будет и там?

Автор: skyboy 27.7.2008, 13:27
connector, ваааа... каой язык программирования? РНР? тогда почему вопрос не в разделе по РНР? или Perl? тогда почему не там? пир чем тут раздел Windows? или у тебя "скриптом" служит bat'ник.
Топистартер задавл вопросы по консольной mysql-client. И по работе исключительно в консоли.
Размещай в дальнейшем вопросы так, чтоб их расположение не вызывало недоумения.
По сабжу: set names надо делать в скрипте. ты делаешь?

Автор: connector 27.7.2008, 16:22
Это были php-скрипты... Кстати разобрался уже.. там всего лишь надо было переменную окружения(NAMES) задать на utf8...
2 skyboy
Вообще то я сюда пришёл по пути: Форум -> Программирование -> Базы данных -> MySQL (еще), т.к. вопрос был по mysql.. но если я не прав, модеры не судите, я на форуме новичок..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)