pondělí 12. října 2015

MS SQL vs. MySQL



Sloupec v MySQL který povoluje ukládat jen hodnoty z výčtu

[mycol] set('1','2','3','4','5','6') default NULL,


Alternativní zápis pro MS SQL který umožňuje také pouze hodnoty z výčtu

Create table [enum_tbl] (
[enum_nr] tinyint NOT NULL CHECK (enum_nr IN('1','2','3','4','5','6','7','8','9','10'))
)

Create table [enum_tbl2] (
[enum_nr] tinyint NULL CHECK (enum_nr IN('1','2','3','4','5','6','7','8','9','10'))
)


Problém při přepisu aplikace z MySQL na MS SQL je v tom že pokud používáte UTF-8
tak každá stringová hodnota pro MS SQL musí obsahovat prefix N'hodnota'.
Čimž se trochu komplikuje vytváření SQL příkazů.


REPLACE

'collate utf8_bin'  => ''
'int(11)' => 'int'
'varchar' => 'nvarchar'
'unsigned' =>''
'auto_increment' => 'IDENTITY(1,1)'

PHP 
'<?' => '<?php'
sqlsrv_query($objConn, $strQueryIN, $params)

NumRows
$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $objConn, $strQueryIN, $params, $options);

Dotaz je potřeba volat s Options = Scrolable, aby bylo možné použít sql_num_rows

mysql_num_rows($result) =>

 if( sqlsrv_fetch( $result ) === false) {
     die( print_r( sqlsrv_errors(), true));
  }
    $REcount = sqlsrv_num_rows($result) !== false
? sqlsrv_get_field($result, 0)
: 0;


FetchArray
mysql_fetch_assoc($result) => sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)

Result
mysql_result($result, 0) => sqlsrv_get_field($result, 0)

if(sqlsrv_num_rows($result)===false) {

if ($REcount!==false)


Last Insert ID
mysql_insert_id() => mssql_insert_id()

 function mssql_insert_id() {
    $id = 0;
    $res = MSSQLQuery($conn, "SELECT @@identity AS id");
    if ($row = mssql_fetch_array($res, MSSQL_ASSOC)) {
        $id = $row["id"];
    }
    return $id;
  }


mysql_real_escape_string

function mssql_escape($str)
{
    if(get_magic_quotes_gpc())
    {
        $str= stripslashes($str);
    }
    return str_replace("'", "''", $str);
}

Zdroje:
http://php.net/manual/en/intro.mssql.php
http://stackoverflow.com/questions/1434298/sql-server-equivalent-to-mysql-enum-data-type
http://dev.mysql.com/doc/refman/5.0/en/set.html
http://stackoverflow.com/questions/12880567/equivalent-of-mysql-insert-id-for-ms-sql-server
http://stackoverflow.com/questions/2146546/mysql-real-escape-string-alternative-for-sql-server
http://php.net/manual/en/function.sqlsrv-fetch-array.php
http://php.net/manual/en/function.sqlsrv-num-rows.php
http://php.net/manual/en/function.sqlsrv-get-field.php


Žádné komentáře:

Okomentovat