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 Test