Problém s MYSQL

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Říjen 10 14:29:29 CEST 2002


On Thu, Oct 10, 2002 at 02:13:15PM +0200, Ondrej Koala Vacha wrote:
> On Thu, 10 Oct 2002, Filip Procházka wrote:
> 
> > Mám MySQL 3.23.41 pod linuxem a následující tabulku
> > ---------------------------------------------------
> > CREATE TABLE Planovani (
> >    ID bigint(20) NOT NULL auto_increment,
> >    CASOD timestamp(14),
> >    CASDO timestamp(14),
> >    POZNAMKA longtext,
> >    BARVA int(11),
> >    POZICE tinyint(4),
> >    LOCK_USER_ID bigint(20),
> >    TYP_INDEX tinyint(4),
> >    PRIMARY KEY (ID),
> >    UNIQUE ID (ID)
> > );
> > 
> > INSERT INTO Planovani VALUES ( '76', '20020101000000', '20021031180000',
> > 'xxxxxx', '8421504', '100', '0', '4');
> > ---------------------------------------------------
> > 
> > Když provedu na tuto tabulku následující query:
> > update Planovani set pozice='500' where id='76'
> > pak by tato query měla logicky nastavit sloupec s názvem "pozice" z
> > původnich 100 na 500 v řádku kde sloupec ID má hodnotu 76
> > To proběhne v pořádku
> > Jenže mysql asi obsahuje chybu nebo nevím ... protože sloupec CASOD coz je
> > timestamp se změní taky i když s výše uvedenou query nemá naprosto nic
> > společného, tedy kromě toho že je ve stejné tabulce.
> > Konkrétně mě změnil sloupec CASOD na 20021010132035, zajimavé, že CASDO
> > zůstal nezměněn.
> > 
> > Neví někdo v čem by mohl být problém ?
> > 
> 
> pozice mate definovanou jako tinyint(4), coz je integer cislo v rozsahu 
> 0-127. Jako integer jsou i dalsi sloupce LOCK_USER_ID a TYP_INDEX, kam 
> ovsem davate retezcove konstanty. Pak musi probehnout konverze (tusim ze 
> dle manualu ala perl), ale pokud nevite co delate, tak se o konverzi 
> nepokousejte a zadavejte ciselne hodnoty.

 To mate pravdu, ale jak to vysvetluje vyse popsane chovani MySQL?
 Pokud udelam update/insert neceho tak i pri konverze datoveho typu 
 podle aktualni konstalace hvezd to prece nemuze delat to co tazatal
 popisuje. IMHO korektni chovani je zahlasit chybu, ze to nelze
 pretypovat.

 PostgreSQL:

 test=# SELECT '12345678'::smallint;
 ERROR:  pg_atoi: error reading "12345678": Numerical result out of
 range
 
 (PostgreSQL nema stejne jako SQL norma tinyint)

    Karel

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Databases