powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysqldump функции и кодировка комментариев
5 сообщений из 5, страница 1 из 1
mysqldump функции и кодировка комментариев
    #39102614
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос, как добиться чтобы mysqldump выгружал комментарии к функциям в правильной кодировке. База в кодировке cp1251. локаль ru_RU.cp1251
Код: sql
1.
mysqldump -u root --routines --default-character-set=cp1251 --comments tst >tst.dmp



в дампе идет директива character_set_client = cp1251 , а поле комментария в utf8
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
/*!50003 SET character_set_client  = cp1251 */ ;
/*!50003 SET character_set_results = cp1251 */ ;
/*!50003 SET collation_connection  = cp1251_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = '' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `t`() RETURNS varchar(10) CHARSET cp1251
    COMMENT 'тест'
begin
-- тест
 return 'тест';
end */;;
...

я так подозреваю что комментарий лег в utf8 еще на этапе создания функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
mysql> show create function t;
+----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Function | sql_mode | Create Function                                                                                                                              | character_set_client | collation_connection | Database Collation |
+----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| t        |          | CREATE DEFINER=`root`@`localhost` FUNCTION `t`() RETURNS varchar(10) CHARSET cp1251
    COMMENT 'тест'
begin
-- тест
 return 'тест';
end | cp1251               | cp1251_general_ci    | cp1251_general_ci  |
+----------+----------+----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+

хотя создавал как обычно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
[deti@www tst]$ cat t.sql
drop function if exists t;
delimiter //
create function t() returns varchar(10) charset cp1251 comment 'тест'
begin
-- тест
 return 'тест';
end
//
[deti@www tst]$ mysql -u root --comments tst < t.sql
[deti@www tst]$ mysql -u root tst -e "select t();"
+------+
| t()  |
+------+
| тест |
+------+
...
Рейтинг: 0 / 0
mysqldump функции и кодировка комментариев
    #39102635
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842хотя создавал как обычноА обычно в консоли какая кодировка? Вряд ли cp1251...
...
Рейтинг: 0 / 0
mysqldump функции и кодировка комментариев
    #39102645
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
[deti@www tst]$ locale
LANG=ru_RU.cp1251
LC_CTYPE="ru_RU.cp1251"
LC_NUMERIC="ru_RU.cp1251"
LC_TIME="ru_RU.cp1251"
LC_COLLATE="ru_RU.cp1251"
LC_MONETARY="ru_RU.cp1251"
LC_MESSAGES="ru_RU.cp1251"
LC_PAPER="ru_RU.cp1251"
LC_NAME="ru_RU.cp1251"
LC_ADDRESS="ru_RU.cp1251"
LC_TELEPHONE="ru_RU.cp1251"
LC_MEASUREMENT="ru_RU.cp1251"
LC_IDENTIFICATION="ru_RU.cp1251"
LC_ALL=ru_RU.cp1251
[deti@www tst]$

[deti@www tst]$ mysql -u root tst
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1605
Server version: 5.1.52 Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | cp1251                     |
| character_set_connection | cp1251                     |
| character_set_database   | cp1251                     |
| character_set_filesystem | binary                     |
| character_set_results    | cp1251                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
mysqldump функции и кодировка комментариев
    #39103210
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842,

когда то пробовал делать функции также с русскими "словенями"
типа вывод полного адреса. Добавлял вставки - дом кв. ул. Не прошло. Точно также.
Все что внутри процедур функций, по-моему хранится в UTF8
...
Рейтинг: 0 / 0
mysqldump функции и кодировка комментариев
    #39103264
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в самом теле то вроде нет проблем, там кодировка будет та в которой набит исходный текст процедуры перед инсталляцией, mysql -ю при этом информация про кодировку поступает через default-character-set который в /etc/my.cnf указан или через аргумент. Все работает и даже русские комментарии при этом читаются через графические SQL менеджеры.
Проблема в том, что при бэкапе mysqldump поле COMMENT всегда выводит в utf8, несмотря на то что предварительно выдает дерективы что процедура то в cp1251. В итоге, при восстановлении дампа текст процедуры то восстанавливается правильно, а комментарии нет.

К слову, комментарии к таблицам , например, выгружаются корректно. Конечно в дампе нужный кусок можно выкусить и перекодировать в cp1251, но я просто их по латыни написал эти комменты ( и пока успокоился ). терь дамп вообще без косяков ресторится.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysqldump функции и кодировка комментариев
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]