Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

integer data type da prihavati "prazan" string

[es] :: MySQL :: integer data type da prihavati "prazan" string

[ Pregleda: 2153 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

trivial
Australija

Član broj: 3355
Poruke: 24
*.adl2.adsl.esc.net.au.



Profil

icon integer data type da prihavati "prazan" string04.05.2007. u 08:32 - pre 206 meseci
Problem je sledeci.

Napravljena je migracija baze iz MSSQL u MySql, sa identichnim (skoro) data filed types. E sada, ranije (u MSSQL) ako se za polje npr. ReferenceID unese vrednost=> '' (prazan string) MSSQL bi to prebacio u 0. Medjutim, sada se kod lomi na sve strane zbog toga, jer je mysql (opravdano sasvim) data type specific, tj. ne dozvoljava 'prazan" string u integer type definiciju.
Problem ne bi bio veliki da kod nije veliki. U kodu su sve 'default values' za polja, bez ozbira na data types '' (parazan string). Takodje nije definisana kosntanta default_value chijom bi pomenom rehsio muke. Vec , moram malte ne svaki deklaraciju polja da menjam. Iako znam da je bolje da se uradi regularno,tj ruchno, bez obzir ana vreme..ali u pitanju je frka sa vremenu pa mi treba neko drugo reshenje, brzhe. shto znachi da ne mora da bude i najbolje. Takodje se iskljuchuje mogucnost default_value deklaracije u bazi, jer takodje zhateva promenu koda.

Poshto nisam (my)sql expert, pitao bih vas da li postoji nachin da u mysql forsiram kolonu da , u ovom slucahju , prihavati 'prazan' string kao NULL vrednost i/ili specific (0). Znam da posotji neshto slichno za datetime deklaraciju,"ALLOW_INVALID_DATES" gde se mozhe forsirati kolona da prihavti nepravlne datume, ali ne znam, niti sam mogao da nadjem neshto slichno za integer gde bi mogao neshto slichno d auradim.

naravno , i svako drugo reshnje je dobrodoshlo.



havla unpared.
 
Odgovor na temu

mb_sa

Član broj: 50529
Poruke: 172
*.PPPoE-3677.sa.bih.net.ba.



Profil

icon Re: integer data type da prihavati "prazan" string04.05.2007. u 15:12 - pre 206 meseci
Citat:
trivial: Takodje se iskljuchuje mogucnost default_value deklaracije u bazi, jer takodje zhateva promenu koda.


Ne znam da li mislimo na isto, al zar nebi pomoglo da postavis defautnu vrijendost kolone ReferenceID na 0. Dakle, napises jedan ALTER TABLE da to odradi.

Trenuno ne mogu da vidim zasto bi to zahtijevalo izmjenu koda, al opet zavisi kako je app napisana!
 
Odgovor na temu

trivial
Australija

Član broj: 3355
Poruke: 24
*.011.dsl.ade.iprimus.net.au.



Profil

icon Re: integer data type da prihavati "prazan" string04.05.2007. u 17:20 - pre 206 meseci
Pazi ovako, problem je u tome shto kod nije neshto posbeno fleksibilno napisan.Kada se instancira objket (php je u pitanju) a koji je obichno vezan za bazu, instanciraju se i vrednosti tog objekta tj default vrednosti kolona. To ne bi bio problem (tj tvoje reshenje bi radilo) da 'update()' funckcija te klase (alias objekta) ne korsiti vec deklarisane promenljive.

Drugim rechima, kada se instancira objekt on vec deklarishe sve kolone sa default vrendostima, i kada ga eventulano updejtujesh/kreirash on komuncira sa bazom, tj unosi u bazu sve kolone/promeljive (preko PEAR-a) koej su se deklarisale prilikom instaciranaj (sa izuztekom onih koje su se promenile i primary key-a, koji je deklarisna u bazi kao autoincrement) i nema shanse da postavim default_value u bazi , tj on ne igra nikakvu ulogu, jer default value je vec deklarisana u klasi kao "prazan string" a u varijabli vezanoj za tu kolnu.

da ne zbunjujem...

kada se pozove update funkcija i kada ona obradi unos (u ovom slucaju, recimo da smo samo prosledili vrendosti za kolonu2 i kolonu 4) , eventulano u sql-u query izgleda neshto ovako...
Code:

insert into users (kolona1, kolona2,kolona3, kolona4,kolona5) VALUES ('',2,'',7,'');

ako je uslov da su kolone sve deklarisane kao integers onda mi ovde mysql - a kod praznih stringova- javi error (shto je ok) dok mssql je ovakav sluchaj sredjivao tako shto je prazan string uzimao kao 'default_value' iz baze i/ili kao 0 (ako niej deklarisana default value) tj nije bacao error.

ma, problem je u tome shto je kod (uslovno recheno) lohse napisan, tj , svaka kolona ima svoju statichnu varijablu kao referencu u nizu . tj ja moram ruchno svaku kolonu u klasi a gde je deklarisana, neshto kao
Code:
 public $fieldvalues = array(self::FEILD_NAME_REFERENCE_ID=>"", self::FEILD_NAME_SOME_ID=>"",itd)
,
da menjam u
Code:
public $fieldvalues = array(self::FEILD_NAME_REFERENCE_ID=>0, self::FEILD_NAME_SOME_ID=>0, itd)

ili idelano u
Code:
public $fieldvalues =array(self::FEILD_NAME_REFERENCE_ID=>slef:DEFAULT_INTEGER_VALUE,self::FEILD_NAME_SOME_ID=>self::DEFAULT_INTEGER_VALUE) 


i sve ovo ne bi bio problem (toliki), da nema preko 30-40 klasa svaka skoro sa svojom tableom i svaka sa bar minimum 5-6 deklarisanih integer kolona i shto ja moram malte ne da svaku statichnu varijbalu provereavam sa bazom (da vidim jel integer type) pa da je promenim, pa tako za drugu, trecu.....tkodje, sa regulars expresssionsima nema shanse da se reshi sluchaj a zbog goreg navedenog.

elem, nije ovo neshto ozbiljno (ma kako zvuchao) , koliko sam ja mozhda lenj...i shto moram jedno dva dana da provedem vreme na opvakvu glupost, menjajuci svaku kolonu i posle da testriam je l sve radi..mesto da se koncetrishem na ostale stvari vezane za datu applikaciju. a ljudi naravno nece pravdanja vec....rezultate

bilo kako bilo, havla na odgovrima josh jednom.



[Ovu poruku je menjao trivial dana 04.05.2007. u 18:31 GMT+1]

[Ovu poruku je menjao trivial dana 04.05.2007. u 18:35 GMT+1]

[Ovu poruku je menjao trivial dana 04.05.2007. u 18:40 GMT+1]

[Ovu poruku je menjao trivial dana 04.05.2007. u 18:42 GMT+1]
 
Odgovor na temu

afwt
AF Web Team
Novi Sad/Chicago

Član broj: 8220
Poruke: 337
*.dsl.chcgil.sbcglobal.net.

Sajt: milos.srdjevic.net/blog


+1 Profil

icon Re: integer data type da prihavati "prazan" string04.05.2007. u 21:16 - pre 206 meseci
MySQL server ti je podesen kao "strict'.

Evo i moj je, za potrebe testiranja:

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"


Dakle, menjaj tu liniju u my.ini i ce da fercera. ;-)
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
 
Odgovor na temu

trivial
Australija

Član broj: 3355
Poruke: 24
*.adl2.adsl.esc.net.au.



Profil

icon Re: integer data type da prihavati "prazan" string07.05.2007. u 01:32 - pre 206 meseci
fercera :)

hvala puno buraz, spasio si me muka (ako ne rada). da dozvoljavaju ovi prokoli poslao biht i pivo.....ovako, imash jedno prijateljsko hvala.

zhivio....
 
Odgovor na temu

[es] :: MySQL :: integer data type da prihavati "prazan" string

[ Pregleda: 2153 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.