Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL küsimus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
kevin3220
HV vaatleja

liitunud: 31.10.2011




sõnum 30.12.2014 02:10:13 MySQL küsimus vasta tsitaadiga

Tere,


Loll küsimus, guugeldasin küll, aga targemaks ei saanud. Väike näide

`email` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`sex` char(1) COLLATE utf8_unicode_ci NOT NULL,
`phoneNumber` int(20) NOT NULL,

Et see sulugudes olev asi (arv), nagu ma aru saan näitab see, et mitu baiti võib väärtus olla? Kuid mis juhutb kui see on suurem? Kas see int(20), tähendab, et INT ei saa olla suurem arv, kui 20? Ning VARCHAR ja CHAR ajavad ka segadusse, üks on 50% kiirem nagu ma aru sain, kui QUERRYT vaja kasutada.

Vabandan, kui väga algajalikud küsimused
Tänud ette ja head vana aasta lõppu ka Teile icon_smile.gif
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 30.12.2014 02:20:52 vasta tsitaadiga

Minu teada näitas see ekraanil näidatavat pikkust.
http://dev.mysql.com/doc/refman/5.6/en/data-types.html

Suht koht tobe (just numbrite puhul), aga mis seal ikka...

_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
Razard
HV vaatleja
Razard

liitunud: 13.11.2003




sõnum 30.12.2014 11:01:44 vasta tsitaadiga

tsitaat:

`email` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`sex` char(1) COLLATE utf8_unicode_ci NOT NULL,
`phoneNumber` int(20) NOT NULL,

Et see sulugudes olev asi (arv), nagu ma aru saan näitab see, et mitu baiti võib väärtus olla? Kuid mis juhutb kui see on suurem? Kas see int(20), tähendab, et INT ei saa olla suurem arv, kui 20? Ning VARCHAR ja CHAR ajavad ka segadusse, üks on 50% kiirem nagu ma aru sain, kui QUERRYT vaja kasutada.


varchar(30) - kuni 30 baiti teksti. Reeglina üks täht üks bait. Aga näoteks õ on 2 baiti (UTF 8 )
char(1) - alati üks täht. õ mahub ka ära
int(20) - kuni 20 kohaline täisarv.
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 30.12.2014 11:09:14 vasta tsitaadiga

Razard, alates versioon 4.1'st loetakse varcharis sümboleid, mitte baite.
MySQL :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 10.1.3 String Type Overview kirjutas:
As of version 4.1, MySQL interprets length specifications in character column definitions in character units. (Before MySQL 4.1, column lengths were interpreted in bytes.) This applies to CHAR, VARCHAR, and the TEXT types.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Razard
HV vaatleja
Razard

liitunud: 13.11.2003




sõnum 30.12.2014 15:49:01 vasta tsitaadiga

mikk36, hea teada thumbs_up.gif
tagasi üles
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 30.12.2014 19:12:12 vasta tsitaadiga

Ahaa, üks küsimus oli veel. CHAR ja VARCHAR erinevus.

Üheti mõistetavat kiirusevahet pole, aga seletan lahti erinevuse. Ise pead teadma, kumb sinu jaoks parem on.
Kui meil on CHAR(10), siis võtab see kettal alati 10 märgi jagu ruumi. Isegi, kui sisuks on ainult 2 tähte, võtab kettal see info ikka 10 märgi jagu ruumi.
VARCHAR(10) võtab alati kettal ruumi [tähtede arv] + 1. Viimane "märk" näitab ise-enesest, kui palju märke reaalselt on. Nii võtab 2 tähe puhul asi ruumi 3 märki.

Kui sul on mingil põhjusel tehtud tekstilise väärtusega näiteks Y(es) ja N(o), siis oleks CHAR(1) parem, kuna väli sisaldab alati ühte tähte ja pole mõtet kulutada veel üht tähte selleks, mis ütleks, et välja sees on üks täht. (Y või N)
Kui sul on aga kellegi kasutajanimi, mis võib olla kuni 32 märki näiteks, siis on VARCHAR(32) parem, kuna kui minu kasutaja nimi läheb sinna sisse, võtab see 4 märki ruumi. CHAR(32) puhul võtaks iga kasutajanimi alati ruumi 32 märki.

Seega pead ise veidi mõtlema ja selle järgi valima, kumba kasutada.

_________________
Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda. icon_wink.gif
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt
Kommentaarid: 110 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 102
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 30.12.2014 19:41:25 vasta tsitaadiga

Ei tasu muidugi unustada, et UTF-8 korral (mis peaks suhtkoht standard tänapäeval olema) võtab CHAR kuni peaaegu 3x rohkem ruumi.

Data: Foobar
VARCHAR(6): 7 baiti
CHAR(6): 18 baiti

Seda seetõttu, et UTF-8 võib kuni 3 baiti ruumi võtta.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
agnar
HV vaatleja

liitunud: 15.08.2010



Autoriseeritud ID-kaardiga

sõnum 01.01.2015 14:30:40 vasta tsitaadiga

tsitaat:

int(20) - kuni 20 kohaline täisarv

Ei ole nii.
int(20) on ikkagi 4-baidine täisarv. Nagu jnt ütles, see 20 tähistab 'näidatavat pikkust'
http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
kevin3220
HV vaatleja

liitunud: 31.10.2011




sõnum 01.01.2015 21:17:12 vasta tsitaadiga

Aga mul on selline küsimus. Aga kui ma ei tea, kui suuri väärtusi ma kavatsen hoidma hakata. Võin kõigile 1000 ka panna?
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 01.01.2015 21:29:34 vasta tsitaadiga

Piirangut ei pea määrama, küll aga kui arvad, et ehk tahad suuremaid arve panna, siis BIGINT on suurem kui INT.
Mõistlik oleks dokumentatsiooni lugeda:
http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
http://dev.mysql.com/doc/refman/5.6/en/create-table.html
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL küsimus
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.