Не выбирается строка из MYSQL

  • Автор темы Автор темы Onu
  • Дата начала Дата начала

Onu

Новичок
Не выбирается строка из MYSQL

Есть бд:
id----url----url_cat
В ней строка
PHP:
'1','http://www.phpclub.ru/','http://phpclub.ru/1/2/WTFq2/4/5/'

Использую:
PHP:
Select * from yaca where id=1;
получаю в ответ строку

Использую:
PHP:
Select * from yaca where url='http://www.phpclub.ru/';
получаю в ответ строку

Использую:
PHP:
Select * from yaca where url_cat='http://phpclub.ru/1/2/WTFq2/4/5/';
в ответ - пустота, хотя строка точно есть.

Пробовал эти же запросы в phpmyadmin, напрямую копируя содержимое колонки url_cat и вставляя его в запрос - аналогично.
Помогает лишь запрос:
PHP:
Select * from yaca where url_cat like 'http://phpclub.ru/1/2/WTFq2/4/5/%';
- мне такой запрос не годится потому, что существует продолжение категорий.

P.s. прежде чем пихать в базу - обрезал все URL, к тому же напрямую в PhpMyAdmin копировал результат - нету пробелов. С чем может быть связано ?:confused:
 
Приведи пожалуйста вывод [sql]SHOW CREATE TABLE yaca[/sql]

И какая версия MySQL?
 
CREATE TABLE `yaca` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL default '',
`url_cat` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
)

INSERT INTO `yaca` VALUES(1, 'http://www.phpclub.ru/', 'http://phpclub.ru/1/2/WTFq2/4/5/');

# Apache 2.2.4
# PHP 5.2.3
# MySQL 5.0.45
 
Не воспроизводится. При использовании mysql command line client тоже ничего не возвращается?
 
svetasmirnova
Через него и работаю. PhpMyAdmin был как запасной вариант, причем на работе использую туже сборку и тоже не выбирается, хотя у знакомого, используещего мою эту сборку - все выбирается на ура - что дома, что на работе.
Возможно, баг MYSQL какой-то ? Или что-то с регистрозависимостью...какой это параметр в mysql?
 
а попробуй всю строку http://phpclub.ru/1/2/WTFq2/4/5/ перевести в нижний регистр и попробовать выборку также в нижнем регистре
 
Farsh
ты о чём?

Onu
Приведи вывод именно SHOW CREATE TABLE: там информация о кодировке будет, SHOW VARIABLES LIKE 'CHAR%' И SHOW VARIABLES LIKE 'COLL%';

Ещё можно CHECK TABLE сделать, чтобы убедиться, что таблица не повреждена.

> Через него и работаю. PhpMyAdmin был как запасной вариант, причем на работе использую туже сборку и тоже не выбирается, хотя у знакомого, используещего мою эту сборку - все выбирается на ура - что дома, что на работе.

А у тебя проблема воспроизводится, если таблицу создать заново и INSERT только эту строчку?
 
Автор оригинала: svetasmirnova
Приведи вывод именно SHOW CREATE TABLE: там информация о кодировке будет, SHOW VARIABLES LIKE 'CHAR%' И SHOW VARIABLES LIKE 'COLL%';

PHP:
| yaca  | CREATE TABLE `yaca` (
  `id` int(10) NOT NULL auto_increment,
  `url` varchar(255) NOT NULL default '',
  `url_cat` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

Ещё можно CHECK TABLE сделать, чтобы убедиться, что таблица не повреждена.
PHP:
+----------------+-------+----------+----------+
| Table          | Op    | Msg_type | Msg_text |
+----------------+-------+----------+----------+
| yaca_full.yaca | check | status   | OK       |
+----------------+-------+----------+----------+


А у тебя проблема воспроизводится, если таблицу создать заново и INSERT только эту строчку?
Именно там и делал - для чистоты эксперимента.
 
PHP:
+--------------------------+----------------------------------------------------
-----+
| Variable_name            | Value
     |
+--------------------------+----------------------------------------------------
-----+
| character_set_client     | utf8
     |
| character_set_connection | utf8
     |
| character_set_database   | latin1
     |
| character_set_results    | utf8
     |
| character_set_server     | latin1
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.0\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+

PHP:
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

Хм...если задать везде одинаковые, думаете, сработает ? :о)
 
Вообще похоже, что там символ который просто не видно. Посмотрите длину этой строки через strlen
 
Вообще похоже, что там символ который просто не видно. Посмотрите длину этой строки через strlen
+1
Код:
mysql> select * from yaca where url_cat='http://phpclub.ru/1/2/WTFq2/4/5/';
+----+------------------------+----------------------------------+
| id | url                    | url_cat                          |
+----+------------------------+----------------------------------+
|  1 | [url]http://www.phpclub.ru/[/url] | [url]http://phpclub.ru/1/2/WTFq2/4/5/[/url] |
+----+------------------------+----------------------------------+
1 row in set (0.00 sec)
посмотри запросом: [sql]SELECT length( url_cat), length('http://phpclub.ru/1/2/WTFq2/4/5/') from yaca where id=1;[/sql]
Код:
+------------------+--------------------------------------------+
| length( url_cat) | length('http://phpclub.ru/1/2/WTFq2/4/5/') |
+------------------+--------------------------------------------+
|               32 |                                         32 |
+------------------+--------------------------------------------+
 
> Хм...если задать везде одинаковые, думаете, сработает ? :о)

Нет, с приведёнными всё должно работать корректно.

Вообще похоже там и правда лишний символ как уже ответил Mols
 
svetasmirnova
Alexandre
Mols
Символ невидимый обнаружился, лишний :eek:
Какие способы еще есть кроме rtrim и регулярки ?
 
Onu

странный вообще запрос! скажи когда ты его выводишь ты же где-то должен получить этот http://phpclub.ru/1/2/WTFq2/4/5/
если ты достаёшь url_cat для формирования ссылки на каталог то, просто используй `id`после того как получил `url` и не парься...

PHP:
$sql = "select `url_cat` from `[имя базы]` where `id` = '[номер id]' ;";

а если более детально то, у тебя эта переменная уже есть в самом первом запросе...
зачем её снова запрашивать...

P.S. если не понял сути прошу прощения, утро...
 
Сверху