- Swifty blogja
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
érdemes lenne megpróbálkoznia a név változtatással is :P
[új] - No rainbow, no sugar - [új]
- A hozzászóláshoz be kell jelentkezni
Tegye fel a kezet, aki dolgozott mar olyan rendszeren, ahol a "NULL" string eseten az oszlop NULL-kent akart beirodni a db-be - fuggetlenul attol, hogy a column NOT NULL volt-e. :)
- A hozzászóláshoz be kell jelentkezni
En nem.
Legtobb retek megkoveteli quote -ot, tehat meg veletlenul sem olyan konnyu elkovetni,
mint az xkcd-s esetet.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Olyannal konkrétan nem találkoztam, ami a
'NULL'
stringet
NULL
-nak feleltette volna meg, viszont olyannal nagyon is (Oracle Database 11g (?) Express Edition), ami az üres stringet (
''
) mindenképpen
NULL
-ként írta be, függetlenül attól, hogy az oszlop
NOT NULL
volt-e, vagy sem. És mivel a cikk szerint a fickó megkapott minden bírságot, amihez nem tartozott rendszámtábla, így nem tűnik lehetetlennek a felállás, hogy a DB marhasága miatt az üres stringek (nincs rendszám)
NULL
-ként kerüljenek be, viszont a rendszer marhasága miatt lekérés után hibásan stringgé (
'NULL'
) castolódjanak. (A szutyok scriptnyelvekben ilyesmi elő szokott fordulni.)
De ez csak tipp.
- A hozzászóláshoz be kell jelentkezni
ami az üres stringet ('') mindenképpen NULL-ként írta be
azert nem artana ismerni azt amivel az ember dolgozik, es akkor nem ernek meglepetesek :)
függetlenül attól, hogy az oszlop NOT NULL volt-e, vagy sem
en meg nem talalkoztam olyan Oracle verzioval (8+) ami a NOT NULL oszlopba null erteket irt volna be, csak hibat ir a not null constraint miatt.
- A hozzászóláshoz be kell jelentkezni
> azert nem artana ismerni azt amivel az ember dolgozik, es akkor nem ernek meglepetesek :)
Hát ja. Főleg, ha derült égből seggbebaszásként közli a főnök, hogy megnyertük a kukakula kupakfeltöltő webes játékának a kivitelezését és van egy hetünk összedobni valamit, viszont a DB az Oracle lesz, mert az ő szerverükön kell dolgozni és ők ezt biztosítják. Hogy mi? Sose volt dolgod Oracle-lel? Oldd meg. Így elég nehéz "ismerkedni". :/
> en meg nem talalkoztam olyan Oracle verzioval (8+) ami a NOT NULL oszlopba null erteket irt volna be, csak hibat ir a not null constraint miatt.
Hát nekünk meg ezt csinálta. Lehet, hogy valami beállítási mizéria volt, amiről nekünk gőzünk nem volt, hogy be lehet állítani, de egyfelől a beállításokhoz nem is fértünk hozzá, másfelől meg mint mondtam: mélyvíz volt.
- A hozzászóláshoz be kell jelentkezni
Utolag lehet azon haborogni ami 'feature', de nem sok ertelme, bar ha az ember megkonnyebbul es ha csak ez a cel akkor mar megerte :)
De igy meg mindig az jon le belole, hogy az ember nem tanul az esetbol csak morog hogy 'vacak'.
- A hozzászóláshoz be kell jelentkezni
Feature? Az önkényes
''
=>
NULL
megfeleltetés? Hát nekem erre egy másik F-el kezdődő szó jutott eszembe...
- A hozzászóláshoz be kell jelentkezni
Lehet sirni, lehet nevetni, oraclenek a '' null, elfogadni el kell ha dolgozni akarsz/kell vele.
- A hozzászóláshoz be kell jelentkezni
Tény, ha valaki dolgozik vele, akkor azt úgy kell, ahogy kell. Szerencsére azóta nekem nem volt szerencsétlenségem hozzá.
- A hozzászóláshoz be kell jelentkezni
A probléma nem az, hogy nem kezel üres stringeket, hanem hogy szó nélkül alakítja át nullra. Pl. Amazon DynamoDB se kezel üres stringeket, de az hibát dob, ha mégis megpróbálsz üres stringet tárolni.
- A hozzászóláshoz be kell jelentkezni
Nem alakit at semmit, az neki null es kesz :) Ha erre hibat akarsz, ott a not null constraint.
- A hozzászóláshoz be kell jelentkezni
Csakhogy az a baj, hogy a null constraint csak és kizárólag oszlopokra vonatkozik, query-kre nem és az Oracle pedig azokban is behelyettesíti.
Az a query, hogy
SELECT COUNT(1) FROM "TABLA" WHERE "OSZLOP" = '';
úgy fog valójában lefutni, hogy
SELECT COUNT(1) FROM "TABLA" WHERE "OSZLOP" = NULL;
és mivel
NULL
-al nem lehet komparálni, így nulla találatot kapunk. (És egyébként ez így elég vicces, mert az igaz, hogy a
NULL
az nem érték, hanem állapot, de akkor hogy lehet egy értéket behelyettesíteni egy értékként kezelt állapottal, úgy, hogy a behelyettesített pszeudoértékkel komparálni nem lehet? Ez a felállás ugyanis logikailag azt jelenti, hogy
('' == NULL) && (NULL != '')
. Ez hogy a fárasba jött ki?)
Persze lehet mondani, hogy ha üres stringre szűrök, akkor nem ezt kell beírni, hanem azt, hogy
SELECT COUNT(1) FROM "TABLA" WHERE "OSZLOP" IS NULL;
csakhogy ki mondta, hogy konkrétan üres stringre szűrök? Én egy string változó tartalmára szűrök, ami akár üres is lehet. Ennek megfelelően plusz egy elágazás, hogy ha üres a változó, akkor az egyik lekérést futtassa és
NULL
állapotra szűrjön, ha meg nem az, akkor meg komparáljon.
És egyébként a mai napig nem kaptam épeszű választ, hogy miért van ez így Oracle-ben. Oké, történelmi okok, kompatibilitás, etc.; nagy kaland volna betenni valahova egyetlen boolean változót, hogy a kompatibilis viselkedés és épeszű viselkedés között váltani lehessen? (És ez a történelmi dolgokra való hivatkozás is csak arra ad - egy egyébként elég gyenge - magyarázatot, hogy miért van még mindig így, de arra nem, hogy anno minek kellett ezt így implementálni...)
- A hozzászóláshoz be kell jelentkezni
Vagy ha már itt tartunk:
var_dump(null == ''); // true
var_dump(null === ''); // false
Nem kell hozzá Orák.
- A hozzászóláshoz be kell jelentkezni
A cikk is arról szól, hogy a csávó gondolt egy nagyot hogy majd okos lesz, de nem volt az.
- A hozzászóláshoz be kell jelentkezni