Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

AMXX < 183, MySQL и кириллица

voed
сообщение 22.1.2015, 20:50
Сообщение #1
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Уже довольно долгое время не могу разобраться с кодировкой. То ли лыжи не едут, то ли я..
В 1.8.3 все просто, SQL_SetCharset("utf8"), и все отображается нормально
В предыдущих версиях такого удовольствия нет. Но вот заметил, что если БД в utf8_unicode_ci, то все отображается нормально, если utf8_general_ci, то кириллица отображается криво. Так ли это? Если да, то как изменить кодировку всех таблиц? Нагуглил только это:
Код
SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci;   ",
    "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ")
    AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = your_database_name;

Скопировать результат, вставить и выполнить еще раз, неужели нет более простого варианта?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя admir
сообщение 23.1.2015, 3:11
Сообщение #2
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

других решений нету. разве что существует какой-то менеджер БД, который имеет такой функционал.
а чем вам этот способ не нравится? всё очень просто, куда уже проще?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 23.1.2015, 3:26
Сообщение #3
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(admir @ 23.1.2015, 3:11) *
других решений нету. разве что существует какой-то менеджер БД, который имеет такой функционал.
а чем вам этот способ не нравится? всё очень просто, куда уже проще?

Да это и не помогает, как выяснилось
Я уже вообще не понимаю, две БД на разных серверах, ставлю одинаковую кодировку, на на в одной БД отображается нормально, в другой иероглифы
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя gavrilyuc
сообщение 1.2.2015, 23:17
Сообщение #4
Стаж: 12 лет

Сообщений: 36
Благодарностей: 6
Полезность: 129

voed,
Вот набросал код:
Код
CREATE PROCEDURE change_encoding_utf8()
BEGIN
    DECLARE table_name VARCHAR(255);
    DECLARE end_of_tables INT DEFAULT 0;
    DECLARE cur CURSOR FOR
        SELECT t.table_name
        FROM information_schema.tables t
        WHERE t.table_schema = DATABASE() and t.table_type like '%BASE%';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET end_of_tables = 1;
    
    OPEN cur;
    tables_loop: LOOP
        FETCH cur INTO table_name;
        IF end_of_tables = 1 THEN LEAVE tables_loop; END IF;
        SET @set_alter = CONCAT('alter table ', table_name, ' CHARACTER SET utf8 COLLATE utf8_unicode_ci');
        PREPARE sql_al FROM @set_alter;
        EXECUTE sql_al;
    END LOOP;
    CLOSE cur;
END

-- вызвать процедуру:
Код
call change_encoding_utf8();


Отредактировал: gavrilyuc, - 1.2.2015, 23:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 1.2.2015, 23:24
Сообщение #5
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

gavrilyuc, спасибо конечно, но как я писал выше, это не помогает)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя gavrilyuc
сообщение 2.2.2015, 13:42
Сообщение #6
Стаж: 12 лет

Сообщений: 36
Благодарностей: 6
Полезность: 129

voed,
Стоп. Ты информацию из бд(Имеется введу русские символы) пытаешься вывести в плагине?
у меня была похожая проблема, только с денвером, я в my.ini(или my.cnf) прописал везде чарсет на utf8.
После чего у меня работало(естествено плагин должен быть utf8 Not Bom)


Ещё есть вероятность того что тебе нужно установить самой базе кодировку:
Код
-- вместо <Data Base Name> название полное название бд.
alter database <Data Base Name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
voed
сообщение 2.2.2015, 13:44
Сообщение #7
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(gavrilyuc @ 2.2.2015, 13:42) *
voed,
Стоп. Ты информацию из бд(Имеется введу русские символы) пытаешься вывести в плагине?

Нет, наоборот, из плагина в БД
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя gavrilyuc
сообщение 2.2.2015, 13:52
Сообщение #8
Стаж: 12 лет

Сообщений: 36
Благодарностей: 6
Полезность: 129

какую субд используете?
PhpMyAdmin ??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 2.2.2015, 13:55
Сообщение #9
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(gavrilyuc @ 2.2.2015, 13:52) *
какую субд используете?
PhpMyAdmin ??

Да
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя gavrilyuc
сообщение 2.2.2015, 14:05
Сообщение #10
Стаж: 12 лет

Сообщений: 36
Благодарностей: 6
Полезность: 129

Если PHPMYADMIN и вы имеете полный доступ к нему, то установите в my.cnf(или my.ini)
чарсет на utf8.

После чего вам будет нужно пересоздать бд, и перезаписать данные(совет, на всякий, сделайте бекап).

и конечно же в плагине используйте SQL_SetCharset.


На старых версиях Amx мне хватало лишь бд настроить нормально, и субд.
Но были проблемы с тем что amx использовал кодировку по умолчанию iso8859(вроде этот, возможно ошибаюсь), и поэтому я избегал запись в базу русский текст.

Один из методов был Триггер.
В плагине конвертируешь в кашу, а в триггере её расхлёбывая возобновлял.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 2.2.2015, 14:23
Сообщение #11
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

gavrilyuc, дело в том, что у меня все ок, но когда этот плагин пытается юзать кто-то другой со своей БД, то у него отображается криво
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Cracky
сообщение 2.2.2015, 17:29
Сообщение #12


Стаж: 15 лет

Сообщений: 768
Благодарностей: 197
Полезность: 506

гугли в сторону set names utf8
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 2.2.2015, 18:20
Сообщение #13


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Обычный запрос после коннекта к бд: SET NAMES utf8
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: