PDO datetime format for MSSQL/dblib

前端 未结 3 942
夕颜
夕颜 2021-02-08 10:10

MSSQL 2005 database has collation \"German_Phonebook_BIN\" (but that\'s not important). Connection to db is done via PDO and FreeTDS (using PHP under Debian Squeeze). When I try

相关标签:
3条回答
  • 2021-02-08 10:35

    I had this problem, too, and found that for some reason when I let freetds apply the settings from freetds.conf (instead of just using the full hostname in my connector string), the dates appeared correctly.

    For example, if I used:

    $link = new PDO("dblib:host=myhost.myfulldomain.com;dbname=MYDB", $user, $pass);
    

    ... then it DIDN'T work as expected - the dates were wacky. But if I used:

    $link = new PDO("dblib:host=myhost;dbname=MYDB", $user, $pass);
    

    ... then it DID work because it found "myhost" in my freetds.conf file.

    My freetds.conf file:

    #   $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
    #
    # This file is installed by FreeTDS if no file by the same 
    # name is found in the installation directory.  
    #
    # For information about the layout of this file and its settings, 
    # see the freetds.conf manpage "man freetds.conf".  
    
    # Global settings are overridden by those in a database
    # server specific section
    [global]
            # TDS protocol version
    ;  tds version = 4.2
    
       # Whether to write a TDSDUMP file for diagnostic purposes
       # (setting this to /tmp is insecure on a multi-user system)
    ;  dump file = /tmp/freetds.log
    ;  debug flags = 0xffff
    
       # Command and connection timeouts
    ;  timeout = 10
    ;  connect timeout = 10
    
       # If you get out-of-memory errors, it may mean that your client
       # is trying to allocate a huge buffer for a TEXT field.  
       # Try setting 'text size' to a more reasonable limit 
       text size = 5242880
    
    # A typical Sybase server
    [egServer50]
       host = symachine.domain.com
       port = 5000
       tds version = 5.0
    
    # My MS SQL server
    [myhost]
       host = myhost.mydomain.com
       port = 1433
       tds version = 8.0
    
    0 讨论(0)
  • 2021-02-08 10:40

    check the setting in /etc/freetds/locales.conf or wherever FREETDSCONF points to - for an example see https://www.centos.org/modules/newbb/viewtopic.php?topic_id=29646.

    Another option could be to use convert in your SQL statement...

    0 讨论(0)
  • 2021-02-08 10:42

    I find the best way to use PHP_PDO_DBLIB with SQL SRV is to store dates as datetime2(6) in the MS SQL SERVER DB. It seems to solve a lot of problems when using the symfony framework anyway.

    0 讨论(0)
提交回复
热议问题