|
| mysql selecter forkert? Fra : Troels Hansen |
Dato : 23-09-05 08:54 |
|
Er demensen begyndt at trænge sig på, eller hva sker der her?
mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
+----+---------+-------------+
| id | titel | fil |
+----+---------+-------------+
| 0 | Forside | forside.php |
+----+---------+-------------+
1 row in set (0.00 sec)
Burde den ikke returnere tomt resultset?
MySql version 4.1.14
mvh Troels Hansen
| |
Kristian Damm Jensen (23-09-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 23-09-05 09:51 |
|
Troels Hansen wrote:
> Er demensen begyndt at trænge sig på, eller hva sker der her?
> mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
> +----+---------+-------------+
> | id | titel | fil |
> +----+---------+-------------+
> | 0 | Forside | forside.php |
> +----+---------+-------------+
> 1 row in set (0.00 sec)
>
> Burde den ikke returnere tomt resultset?
Det ser godt nok mærkeligt ud.
Men uden kendskab til tabeldefinition og -indhold er det vanskeligt at
være sikker.
Kristian
| |
Troels Hansen (23-09-2005)
| Kommentar Fra : Troels Hansen |
Dato : 23-09-05 11:47 |
|
Kristian Damm Jensen wrote:
>
> Det ser godt nok mærkeligt ud.
>
> Men uden kendskab til tabeldefinition og -indhold er det vanskeligt at
> være sikker.
>
> Kristian
Kan der selvfølgelig være noget om.
mysql> desc side;
+-------+-----------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | | PRI | 0 | |
| titel | tinytext | | | | |
| fil | tinytext | | | | |
| login | set('ja','nej') | | | ja | |
+-------+-----------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> select * from side;
+----+---------------+-------------------+-----------+
| id | titel | fil | login |
+----+---------------+-------------------+-----------+
| 1 | Forside | forside.php | nej |
| 2 | Modtager | modtager.php | ja |
| 3 | Modtagerliste | modtagerliste.php | ja |
+----+---------------+-------------------+-----------+
Jeg har i mellemtiden rettet ID en op, så jeg starter fra 1 i stedet for 0.
Det er somom den, i tilfelde af at det er en int, og en streng der
bliver sammenlignet, regner strengen for false. Lyder bare mærkeligt.
Skriv jeg:
SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = false;
fik jag samme resultet, hvilket også giver mening (og er beskrevet på
mysql.net), men det andet synes jeg ikke giver mening.
Nogen der har en fornuftig forklaring?
mvh Troels Hansen
| |
Benny Nissen (23-09-2005)
| Kommentar Fra : Benny Nissen |
Dato : 23-09-05 11:55 |
|
Troels Hansen wrote:
> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = false;
> fik jag samme resultet, hvilket også giver mening (og er beskrevet på
> mysql.net), men det andet synes jeg ikke giver mening.
> Nogen der har en fornuftig forklaring?
Hvorfor giver det ikke mening ?
int('test') er jo netop 0
--
Benny Nissen
| |
Thomas Damgaard Niel~ (23-09-2005)
| Kommentar Fra : Thomas Damgaard Niel~ |
Dato : 23-09-05 11:48 |
|
Troels Hansen wrote:
> Er demensen begyndt at trænge sig på, eller hva sker der her?
> mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
> +----+---------+-------------+
> | id | titel | fil |
> +----+---------+-------------+
> | 0 | Forside | forside.php |
> +----+---------+-------------+
> 1 row in set (0.00 sec)
>
> Burde den ikke returnere tomt resultset?
Hvilket domain er side.id?
--
Thomas Damgaard Nielsen
http://thomasdamgaard.dk/
Svar venligst under det du citerer. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Mads Lie Jensen (23-09-2005)
| Kommentar Fra : Mads Lie Jensen |
Dato : 23-09-05 12:00 |
|
On Fri, 23 Sep 2005 09:54:23 +0200, Troels Hansen <idle@invalid.email>
wrote:
>Er demensen begyndt at trænge sig på, eller hva sker der her?
>mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
>+----+---------+-------------+
>| id | titel | fil |
>+----+---------+-------------+
>| 0 | Forside | forside.php |
>+----+---------+-------------+
>1 row in set (0.00 sec)
>
>Burde den ikke returnere tomt resultset?
Tjo.... det skulle man jo forvente, men den gør det nu som den skal....
mysql konverterer selv strengen 'test' til et tal - og det får den så
åbenbart 0 ud af.
Hvis du i stedet bruger WHERE id="2test", så vil den få det til tallet
2, og returnere posten med det id.
Om det så er smart at den gør sådan.... men jeg er ret sikker på det er
beskrevet i manualen et eller andet sted.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk
| |
Stig H. Jacobsen (29-09-2005)
| Kommentar Fra : Stig H. Jacobsen |
Dato : 29-09-05 21:21 |
| | |
Peter Brodersen (30-09-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 30-09-05 01:57 |
|
On Thu, 29 Sep 2005 20:20:52 +0000 (UTC), "Stig H. Jacobsen"
<stighj-at-googles-mail@nospam.invalid> wrote:
> http://sql-info.de/mysql/gotchas.html
Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre. Du må
godt smide et mere direkte link, så det er muligt at se, hvilken én af
de gotchas, du skønnede var relevant her.
Såvidt, jeg kan se, er der ikke tale om nogen egentlig gotcha, men
blot om en implicit cast. Det samme oplever du i mange andre tilfælde.
Fx:
$ php -r 'print (0 == "test");''
1
$ perl -e 'print (0 == "test");'
1
... men vel at mærke:
$ perl -e 'print (0 eq "test");'
(intet output)
--
- Peter Brodersen
| |
Stig H. Jacobsen (30-09-2005)
| Kommentar Fra : Stig H. Jacobsen |
Dato : 30-09-05 08:51 |
|
On Fri, 30 Sep 2005 02:56:34 +0200, Peter Brodersen wrote:
> > http://sql-info.de/mysql/gotchas.html
>
> Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre.
Sagen er MySQL og linket illustrerer diverse utilstrækkeligheder
ved MySQL - til skræk og advarsel
> Såvidt, jeg kan se, er der ikke tale om nogen egentlig gotcha, men
> blot om en implicit cast. Det samme oplever du i mange andre tilfælde.
# create table test_table ( custno int primary key );
# select * from test_table where custno = 'skonummer';
ERROR: invalid input syntax for integer: "skonummer"
# select VERSION();
version
---------------------------
PostgreSQL 8.0.1 on ...
--
Stig
| |
Peter Brodersen (30-09-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 30-09-05 15:16 |
|
On Fri, 30 Sep 2005 07:50:49 +0000 (UTC), "Stig H. Jacobsen"
<stighj-at-googles-mail@nospam.invalid> wrote:
>> > http://sql-info.de/mysql/gotchas.html
>> Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre.
>Sagen er MySQL og linket illustrerer diverse utilstrækkeligheder
>ved MySQL - til skræk og advarsel
Nej, sagen er, at du uden kontekst blot smed et generisk
MySQL-gotcha-link på banen, der ikke havde henvisning til den aktuelle
problemstilling. Det var ingen hjælp til den oprindelige spørger, og
at implicit opfordre til at skifte til en anden rdbms uden at kende
til omstændighederne (fx om det overhovedet er en mulighed for
spørgeren, om andre rdbms'ers gotchas medfører regressions, etc.) er
blot religion.
--
- Peter Brodersen
| |
Stig H. Jacobsen (30-09-2005)
| Kommentar Fra : Stig H. Jacobsen |
Dato : 30-09-05 17:28 |
|
Nej, det er ikke religion, men erfaring
--
Stig
| |
|
|