Als je uren of minuten o.i.d. moet opslaan in een database als welk (nummer) type zou jij het dan opslaan?
Je wilt bijvoorbeeld een 40 uur durende werkweek opslaan, is 40 dan een int, float, double, decimal, ..?
Er bestaan query builders die op basis van de database verbinding de juiste SQL proberen te genereren.
Maar kies een database, en gebruik de unieke functies voor die wanneer nodig, maar probeer wel zo veel mogelijk volgens de ANSI SQL standaard te werken wanneer mogelijk.
Dat betekend bijvoorbeeld double quotes i.p.v. backticks gebruiken.
Voor MySQL betekend dit dat je connectie moet dan wel in de ANSI_QUOTES mode staan:
// stel de default modus in, voer uit als super user
SET GLOBAL sql_mode = 'ANSI_QUOTES,andere,opties,als,je,dat,wilt';
// stel de modus voor deze connectie in
SET SESSION sql_mode = 'ANSI_QUOTES,andere,opties,als,je,dat,wilt';
Je zo jezelf leren om correctere SQL te schrijven. MySQL vindt veel goed, maar als je ooit eens met een andere database moet werken kan het heel irritant zijn als je niet weet wat ANSI SQL syntax is en wat MySQL syntax is.
Pipo, dan denk ik eerder integer. of zijn er ook mensen die 32,5 uur per week werken of zo?
Ja natuurlijk zijn deze er.
Wanneer ik de ene week 32,5 uur werk en de volgende week 47,5 uur dan hoor je mijn baas echt niet klagen.
En ik weet zeker dat er heel erg veel bedrijven zijn waar het zo geregeld is.
Overigens, bij veel bedrijven wordt er ook regelmatig over gewerkt waardoor je zo op 43,25 uur in de week kunt komen.
Dos, bedankt voor je reacties! :) Wat is ANSI en wat doet 't? Wat is het verschil met TRADITIONAL? Wat gebruik ik nu?
Ik zie dat het eenvoudig aan je verbinding kan toevoegen.
<?php
$pdo = new PDO(
$dsn,
$username,
$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="ANSI,TRADITIONAL"')
);
?>
Ger; Wat bedoel je?
Pipo; Sorry, ja natuurlijk kan dat :) Ik bedoelde meer als ik vast uren contract van 32,5 uur of zo. Maar met opslaan van minuten als INTEGER is dat ook geen probleem.
Het is de non-profit organisatie die SQL standaardiseert. ANSI SQL is vergelijkbaar met Algemeen Beschaafd Nederlands, MySQL, MsSQL, PostgreSQL etc zijn dan allemaal dialecten.
Mooi uitgelegd :) En TRADITIONAL is de default waarde en het dialect? De regels zoals MySQL vind dat het moet.
Is de voorbeeld code die ik gaf door ANSI en TRADITIONAL te setten goed? Of heeft dat weinig zin.
Ik plaatste mijn opmerking op Dos zijn opmerking "double quotes i.p.v. backticks gebruiken"
Als je alleen alfanumierieke karakters en _ in table- en kolomnamen gebruikt én geen gereserveerde woorden, dan hoef je ze niet te omsluiten met wat dan ook.
Ik plaatste mijn opmerking op Dos zijn opmerking "double quotes i.p.v. backticks gebruiken"
Als je alleen alfanumierieke karakters en _ in table- en kolomnamen gebruikt én geen gereserveerde woorden, dan hoef je ze niet te omsluiten met wat dan ook.
Verschillende RDMBs hebben verschillende reserved words.
SQL editors willen nog wel eens "identifier hier" een ander kleurtje geven, syntax coloring vind ik erg fijn.
De databases waar ik van tijd tot tijd mee te maken heb kunnen allemaal ingesteld worden om dubbele quotes volgens de ANSI standaard te behandelen.
Anyway, dit is een beetje het zelfde als een IDE war, we gaan het waarschijnlijk niet eens worden.
<?php
$pdo = new PDO(
$dsn,
$username,
$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode='ANSI,TRADITIONAL'")
);
?>
Dat is beter, single quotes zijn voor strings binnen SQL.
Voor de rest ziet het er goed uit.