2013-07-04 18 views
8

Sul mio computer di casa,MySQL selezionare b'1' ritorna intero 1 o ASCII carattere 1 a seconda dell'ambiente

mysql_fetch_row(mysql_query(" select b'1' "))[0]

ritorna stringa "1".

Ma quando ospitati su server web restituisce stringa di caratteri ASCII avere 1.

Doc fa dire-

valori dei bit vengono restituiti come valori binari. Per visualizzarli in forma stampabile , aggiungi 0 o usa una funzione di conversione come BIN().

Ma sul mio computer locale restituisce ancora "1" senza alcuna conversione eseguita da me.

Come posso avere lo stesso comportamento sul mio server web?

Se ottengo lo stesso comportamento, allora non devo convertire i miei codici PHP da like

$row = mysql_fetch_row(mysql_query(" select bit1_field from .. where .. ")); 
if($row[0] === '1') ...; 

a

... select bit1_field+0 as bit1_field ... 

dove bit1_field è di tipo bit(1).

+0

Stai utilizzando entrambe la stessa versione di PHP e MySQL? – Patashu

+0

@Patashu Le versioni PHP e Apache sono le stesse. MySQL è diverso, ma i documenti di entrambe le versioni dicono la stessa cosa, che i bit devono essere convertiti per essere visualizzati. – gom

+0

Come stai testando? Stai usando 'var_dump()'? Si noti inoltre che il dereferenziazione dell'array 'mysql_fetch_row (mysql_query (" select b'1 '")) [0]' è supportato solo da PHP ** 5.4 **. Spero che tu abbia abilitato anche la segnalazione degli errori nel caso ... – HamZa

risposta

2

Sembra che si stiano utilizzando due driver diversi sulle macchine. Ce ne sono due, php5-mysqlnd e php5-mysql. Website Factor ha scritto sul comportamento diverso per il campo BIT alla fine di aprile e ho anche diverse macchine con la stessa versione, ma diverse unità. Probabilmente perché il driver non viene modificato durante l'aggiornamento da una versione precedente, ma quando php> 5.4 è installato, viene installato con php5-mysqlnd per impostazione predefinita. Ecco lo MySQL page about the differences.

+0

Questo l'ha fatto! Grazie. Sono passato a mysqlnd sul server, ora bit'1 'viene restituito come "1". yum rimuovi php54-mysql; yum install php54-mysqlnd; servizio httpd restart; – gom

Problemi correlati