Allen,

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, ..?

Bvd
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.

ANSI-standard SQL specifies that each table name must be a single word comprised of alphanumeric characters and the underscore symbol (_)

Zolang je daar aan houdt heb ook niks van doen met double quotes, square brackets of wat dan ook.
Michael - op 15/04/2014 11:41:08

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.
American National Standards Institute

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.
http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sqlmode_ansi


SELECT @@SQL_MODE

om te zien welke modes nu gebruikt worden.

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.
Ger van Steenderen op 16/04/2014 09:58:16

http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sqlmode_ansi


SELECT @@SQL_MODE

om te zien welke modes nu gebruikt worden.

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.
@Dos; Is de voorbeeld code die ik gaf door ANSI en TRADITIONAL te setten goed? Of heeft het weinig zin deze beide te setten.

@Ger; Oke. Backticks gebruik ik sowieso niet en quotes bij tabel namen ook niet.
<?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.

Reageren