[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кириллический запрос к базе
slavikx3m
Здравствуйте.
Помогите пожалуйста разобраться с затруднением кому не сложно!

Обычный запрос к базе на кириллице выдаёт ошибку "Проблема при подключении к БД" или вообще ничего не выводит (если столбец к которому адресован запрос перевести в кодировку utf8_general_ci).

Сопоставление соединения с MySQL: cp1251_general_ci
Таблица, Сравнение: cp1251_general_ci
Столбец запроса: cp1251_general_ci

Сам код:

include "../db.conf.php";
@mysqli_query ($db, 'set character_set_results = "cp1251"');

$query = "SELECT * FROM `pain_shop_goods` WHERE `type`='Аксессуары'";

$result = mysqli_query($db, "$query") or die ("Проблема при подключении к БД");

while($info = mysqli_fetch_array($result)){

$id = $info['id'];
$article = $info['article'];
.
.
.
.
.


ну и так далее


Если вместо 'Аксессуары' поставить любое латинское слово, которое есть в столбце, то находит без проблем.

Менял кодировку и в коде и в таблице, не помогло. Может кто-то сталкивался с подобной трудностью. Помогите пожалуйста.
Razzwan
@mysqli_query ($db, 'set character_set_results = "cp1251"');
Нужно использовать кодировку символов utf-8 - ВЕЗДЕ. У тебя сейчас вопрос формируется в файле с какой кодировкой? Тоже должна быть utf-8.

Короче, идея в том, чтоб во всех местах была одна и та же кодировка. Но это еще не все. Дело в том, что операторы сравнения могут некорректно работать с кодировками, использующими многобайтовую запись символов. Поэтому для кодировки utf-8 (она двубайтовая) нужно использовать специальные операторы сравнения. Копай в этом направлении.


_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
slavikx3m
Цитата (Razzwan @ 15.09.2015 - 20:46)
@mysqli_query ($db, 'set character_set_results = "cp1251"');
Нужно использовать кодировку символов utf-8 - ВЕЗДЕ. У тебя сейчас вопрос формируется в файле с какой кодировкой? Тоже должна быть utf-8.

Короче, идея в том, чтоб во всех местах была одна и та же кодировка. Но это еще не все. Дело в том, что операторы сравнения могут некорректно работать с кодировками, использующими многобайтовую запись символов. Поэтому для кодировки utf-8 (она двубайтовая) нужно использовать специальные операторы сравнения. Копай в этом направлении.

Спасибо за уделенное время и за ответ.

Действительно файл был в ANSI пересохранил в utf-8, но возникла ещё проблема:
Как ты говорил я хотел сделать тестовую таблицу изначально в utf-8, выбрал при создании Сравнение: utf8_general_ci, создал текстовое поле name с той же кодировкой и.... и сохранилась таблица с кодировкой cp1251_general_ci. Пробовал поменять её средствами mysql все рано возвращает cp1251_general_ci.

В принципе не получится жить с кодировкой cp1251_general_ci, обязательно для запросов в кириллице к базе вся цепочка должна быть в utf-8. Нет других путей?
Razzwan
Цитата (slavikx3m @ 16.09.2015 - 01:53)
Нет других путей?
Другой путь есть всегда. Просто с кодировкой utf-8 живется гораздо проще. Я не подскажу тебе другой путь, т.к. сам использую только utf-8.

Возможно у тебя устаревшая сборка mysql, потому как в актуальных все в порядке с кодировкой. Попробуй установить другую сборку сервера, например xampp или Openserver Или обновиь mysql.

При создании новой БД можно указать кодировку по умолчанию.

Тип таблиц лучше выбрать InnoDB.

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
AllesKlar
user posted image

-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------

user posted image

_____________
[продано копирайтерам]
slavikx3m
Цитата (AllesKlar @ 16.09.2015 - 02:50)
user posted image

-----------------------------------------------------------------------
-----------------------------------------------------------------------
-----------------------------------------------------------------------

user posted image

Спасибо за потраченное время и внимание. Я знаю как менять кодировку в MySql. Если я понял смысл твоего сообщения.
slavikx3m
Цитата (Razzwan @ 16.09.2015 - 00:47)
Цитата (slavikx3m @ 16.09.2015 - 01:53)
Нет других путей?
Другой путь есть всегда. Просто с кодировкой utf-8 живется гораздо проще. Я не подскажу тебе другой путь, т.к. сам использую только utf-8.

Возможно у тебя устаревшая сборка mysql, потому как в актуальных все в порядке с кодировкой. Попробуй установить другую сборку сервера, например xampp или Openserver Или обновиь mysql.

При создании новой БД можно указать кодировку по умолчанию.

Тип таблиц лучше выбрать InnoDB.

Спасибо.

Для проверки пришлось создавать базу заново (благо тариф у хостера позволяет ещё создавать базы) на mySQL 5.5 (предыдущая была на 5.0), ставить всё везде utf-8, файл тоже сохранил в utf-8.... всё то же событие. загадка...

ОДНАКО удалось решить проблему просто используя старые функции mysql_query и mysql_fetch_array и без проблем нашел все русские слова что мне нужны были:


include "config.db.php";
$newstt = mysql_query("SELECT * FROM goods WHERE name='Ира'");
while($info = mysql_fetch_array($newstt))
{
$id = $info['id'];
$name = $info['name'];

echo '#'.$id.' имя: '.$name.'';
}


Пока буду жить с этим, время идет а решения не вижу для новых функций mysqli_query и mysqli_fetch_array.

НО ЕСЛИ КТО_ТО ЗНАЕТ ОТВЕТ КАК ЗАСТАВИТЬ ИСКАТЬ mysqli_query и mysqli_fetch_array КИРИЛЛИЧЕСКИЕ СЛОВА, ТО ОЧЕНЬ ПРОШУ РАССКАЗАТЬ!!!
Razzwan
Цитата (slavikx3m @ 16.09.2015 - 12:21)
Для проверки пришлось создавать базу заново (благо тариф у хостера позволяет ещё создавать базы) на mySQL 5.5 (предыдущая была на 5.0), ставить всё везде utf-8, файл тоже сохранил в utf-8.... всё то же событие. загадка...

Есть смысл задуматься о том, чтоб сменить хостера. У меня была похожая проблема на хостинге http://hosting.ua/ Потом хостинг обновил mysql - и вуаля, все заработало. Скорее всего у них очень ленивые программисты и они уже лет 10 не обновляли MySql.

Кстати, ты тип таблицы InnoDB выбрал?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
slavikx3m
Цитата (Razzwan @ 16.09.2015 - 10:16)
Цитата (slavikx3m @ 16.09.2015 - 12:21)
Для проверки пришлось создавать базу заново (благо тариф у хостера позволяет ещё создавать базы) на mySQL 5.5 (предыдущая была на 5.0), ставить всё везде utf-8, файл тоже сохранил в utf-8.... всё то же событие. загадка...

Есть смысл задуматься о том, чтоб сменить хостера. У меня была похожая проблема на хостинге http://hosting.ua/ Потом хостинг обновил mysql - и вуаля, все заработало. Скорее всего у них очень ленивые программисты и они уже лет 10 не обновляли MySql.

Кстати, ты тип таблицы InnoDB выбрал?

Да этот тип (InnoDB) везде по умолчанию выставлен
Razzwan
Цитата (slavikx3m @ 16.09.2015 - 14:29)
Да этот тип (InnoDB) везде по умолчанию выставлен
Значит остается менять хостера. Дело не в тебе. Ты все сделал правильно. Я помню провозился тогда с этим хостом неделю - думал я дурак. Оказалось - все иначе.

Можешь еще обратиться в службу поддержки с этим вопросом. Может они пошевелят жопой и обновят mysql.

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
twin
Цитата (Razzwan @ 16.09.2015 - 10:42)
Может они пошевелят жопой и обновят mysql.

Причем тут mysql вообще?

slavikx3m
Попробуй так:

include "../db.conf.php";
mysqli_set_charset($db, "utf8");
.
.
.
.
.
.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
slavikx3m
Короче, давай доступ к хостингу и базе, ща настроим smile.gif

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.