Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / mysqldump функции и кодировка комментариев / 5 сообщений из 5, страница 1 из 1
13.11.2015, 09:31:43
    #39102614
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mysqldump функции и кодировка комментариев
Такой вопрос, как добиться чтобы 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
13.11.2015, 09:49:18
    #39102635
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mysqldump функции и кодировка комментариев
sanek842хотя создавал как обычноА обычно в консоли какая кодировка? Вряд ли cp1251...
...
Рейтинг: 0 / 0
13.11.2015, 09:59:33
    #39102645
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mysqldump функции и кодировка комментариев
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
13.11.2015, 18:58:58
    #39103210
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mysqldump функции и кодировка комментариев
sanek842,

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

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


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