Задавайте вопросы, мы ответим
Вы не зашли.
Объясните, происходит ли перекодировка между данными, которые вводит клиет в консольной или терминальной сессии и хранимыми данными на сервере MySQL?
Версия для win32 - 5.0.51.
---
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.51 |
+-----------+
В секции [mysqld] файла конфигурации никаких default-character-set, skip-character-set-client-handshake. Т.е база создается с характеристиками:
default-character-set=latin1
default-collation=latin1_swedish_ci
Выполняю следующую последовательность (набрал в редакторе, который поддерживает кодировки cp866, cp1251 и koi8-r)
--- (Начало)Это текстовая копия экрана из сеанса MS-DOS ---
Microsoft(R) Windows 98
(C)Copyright Microsoft Corp 1981-1999.
D:\SQL>type d
drop table if exists t;
CREATE TABLE t (
name char(40) NOT NULL
);
insert into t (name) values ('Dos cp866 Кодировка');
insert into t (name) values ('Win cp1251 -юфшЁютър');
insert into t (name) values ('NIX koi8r ы--+--+--');
select * from t;
--- (Конец)
Использовал функцию копирование из экрана MS-DOS и конечно реальные символы для кодировок cp1251 и koi8r отличаются от приведенных выше. Но везде последнее слово в строке "Кодировка"
Далее выполняю этот скрипт в mysql, получаю:
mysql> \. d
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.06 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.05 sec)
Query OK, 1 row affected (0.00 sec)
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 Кодировка |
| NIX koi8r лПДЙТПЧЛБ |
+----------------------+
3 rows in set (0.00 sec)
Далее выполняю:
mysql> insert into t values ('НОВАЯ запись');
Query OK, 1 row affected (0.11 sec)
mysql> select * from t;
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 Кодировка |
| NIX koi8r лПДЙТПЧЛБ |
| ??'?? §_ЇЁбм |
+----------------------+
4 rows in set (0.22 sec)
Просматриваю таблицу `t.MYD` hex-вьювером, и - первая и четвертая записи в кодировке cp866, вторая - cp1251, третья - koi8-r.
Здесь результат выполнения такой команды:
mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.33 sec)
Пробовал менять в секции [mysqld] и [client]
default-character-set=[cp1251|cp866]
default-collation=[cp1251|cp866]_general_ci
character_set_client=[cp866|cp1251]
После смены default-character-set перезапускал сервер, выполнял команды "DROP DATABASE test; CREATE DATABASE test"
Плюс все это же с наличием/отсутстваем skip-character-set-client-handshake и с обязательным перезапуском mysqld, а также с выполнением первой командой клиентом "SET NAMES cp1251|cp866" и т.д. - и НИЧЕГО! Все это опробовано под учетной записью root и специально созданным пользователем - test с ограниченными правами.
Так все происходит ли преобразование кодировок?
И последнее NIX'ий клиент правильно показывает третью запись с кодировкой koi8r и при добавлении новой записи в koi8r правильно ее же отображает от любого пользователя!!!
Но очень нужно использовать клиента MySQL именно для win98
Неактивен
Таблица в той кодировке, которая в ее описании, смотрите SHOW CREATE TABLE test;
Если у Вас таблица в latin1, то русские буквы могут в ней сохраниться, но только по случайности. Определитесь, в какой русской кодировке хотите, чтобы данные хранились на сервере (это не очень важно, так как перекодировка происходит). Пусть koi8r
CREATE TABLE test (.....) CHARSET=koi8r;
Далее, Вам необходимо понять в какой кодировке живет клиент mysql в виндоусе, вероятно в cp866. В таком случае первой командой Вам надо сообщить MySQL, что вы вводите все в cp866.
SET NAMES cp866;
Далее просто делайте INSERT и русские буквы, MySQL перекодирует их из cp866 в koi8r и положит в таблицу, а при SELECT наоборот.
Смотрите статью: http://sqlinfo.ru/articles/info/2.html
Неактивен
Извините за повторную регистрацию, первый раз что-то прошло не так :-(
Итак перезапускаю сервер.
в my.cnf следующие строки:
[client]
# default-character-set=cp1251
default-character-set=cp866
[mysqld]
default-character-set=cp1251
Скрипт `d` изменен следующим образом:
drop table if exists t;
CREATE TABLE t (
name char(40) NOT NULL
) default charset cp1251;
insert into t (name) values ('Dos cp866 Љ®¤Ёа®ўЄ ');
insert into t (name) values ('Win cp1251 Кодировка');
insert into t (name) values ('NIX koi8r лПДЙТПЧЛБ');
show create table t\G
select * from t;
Результат выполнения скрипта и последующих команд insert/select:
mysql> \. d
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
*************************** 1. row **************
Table: t
Create Table: CREATE TABLE `t` (
`name` char(40) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
1 row in set (0.06 sec)
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 Кодировка |
| NIX koi8r лПДЙТПЧЛБ |
+----------------------+
3 rows in set (0.05 sec)
mysql> insert into t values ('Новая строка');
Query OK, 1 row affected (0.11 sec)
mysql> select * from t;
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 Кодировка |
| NIX koi8r лПДЙТПЧЛБ |
| ?Rў_п бваRЄ_ |
+----------------------+
4 rows in set (0.06 sec)
Неактивен
И еще пробую первой командой выполнить `set names` - результат хуже :-(
----
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.51 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> set names cp866;
Query OK, 0 rows affected (0.11 sec)
mysql> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | cp866 |
| character_set_connection | cp866 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | cp866 |
| character_set_server | cp1251 |
| character_set_system | utf8 |
| character_sets_dir | C:\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.06 sec)
mysql> \. d
Query OK, 0 rows affected (0.11 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.22 sec)
Query OK, 1 row affected, 1 warning (0.00 sec)
Query OK, 1 row affected, 1 warning (0.00 sec)
*************************** 1. row ***********
Table: t
Create Table: CREATE TABLE `t` (
`name` char(40) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
1 row in set (0.11 sec)
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 ?одировка |
| NIX koi8r л???????? |
+----------------------+
3 rows in set (0.05 sec)
Неактивен
Похоже просто проблемы mysql-клиента от win98 :-(
В линуксе следующие команды к данной таблице отработали на ура:
set names koi8r;
insert into t values ('Новая строка');
select * from t;
И win-клиент, после отработки этих команд в линуксе, отвечает:
Последняя строка заносилась линуксовым клиентом...
mysql> select * from t;
+----------------------+
| name |
+----------------------+
| Dos cp866 ?R¤ЁаRўЄ_ |
| Win cp1251 Кодировка |
| NIX koi8r лПДЙТПЧЛБ |
| ?Rў_п бваRЄ_ |
| Новая строка |
+----------------------+
5 rows in set (0.61 sec)
Неактивен
Возможно в винде в консоли нужно SET NAMES cp1251
Неактивен
Это было опробовано еще до первого сообщения.
И похоже, проблема в кривой win98, хотя вроде лицензионная second edition и т.д и т.п.
Дело в том, что команда chcp в сеансе MS-DOS для win98 выдает следующий результат и менять кодовую страницу не дает:
---
C:\>chcp
Активная кодовая страница: 437
C:\>chcp 866
Кодовая страница 866 для системы не подготовлена
Неактивен
Именно поэтому в Windows рекомендуют использовать GUI Tools - потому что
правильно использовать консоль очень тяжело.
Под win2k/xp у меня работал cp866. В win98 не тестировал никогда
Неактивен