2012-10-03 22 views
6

Quiero insertar null en una columna en una tabla.¿Cuál representa nulo? undef o cadena vacía

¿Cuál representa nulo? undef o cadena vacía ''.

¿Cuál debe usarse y por qué? Sé de defined y puedo verificarlo.

Pero estoy buscando más desde la perspectiva de la base de datos.

¿Cuál representa null más correctamente?

Actualización: Estoy utilizando el módulo DBI.

Respuesta

9

DBI usa undef para representar un SQL NULL. La cadena vacía representa una cadena vacía.

Sin embargo, algunas bases de datos no hacen una distinción entre NULL y la cadena vacía. Oracle is a particular offender here. DBI no puede hacer nada al respecto.

8

Suponiendo que Perl DBI, undef representa un SQL NULL.

Una cadena vacía en Perl representa exactamente lo mismo (es decir, una cadena vacía) en SQL.

+0

Si ambos representan 'NULL', ¿cuál usar? –

+2

@Drt, * no * ambos representan 'NULL'. 'undef' hace. – Axeman

+0

@Axeman y @ Alnitak ... Cuando hago 'select * from tablename donde columnname es null'. Obtengo las mismas filas en cada caso. :( –

4

Suponiendo que está usando el módulo DBI, y está utilizando argumentos ligados (ya que si estuviera construyendo manualmente el SQL, se usaría NULL en la cadena):

Los valores no definidos, o undef, son usado para indicar valores NULL.

Ver the perldoc for DBI

Si no está usando DBI directamente (por ejemplo, está utilizando DBIx :: Clase o algún otro ORM), entonces es probable que encuentre que hereda el comportamiento de DBI para esto.

+0

Entonces, si ejecuto la instrucción' select' en esa columna, ¿qué vuelve para 'undef'. –

+0

Como no tendrá 'undef', esa pregunta no tiene sentido. Si es NULL, entonces obtendrá' undef'. Vea la documentación que señalé en mi respuesta: [undef valores NULL están representados por valores indefinidos en Perl] (ht tp: //search.cpan.org/dist/DBI/DBI.pm#Notation_and_Conventions) – Quentin

+0

Tenga cuidado al pasar NULL a como un parámetro enlazado.Algunas bases de datos no harán lo que usted espera y requerirán "donde x es nulo" y "donde x =?" y un parámetro NULL no es siempre el mismo. Escribí un resumen de la discusión sobre los usuarios de dbi hace años en http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_2.html#nulls – bohica

Cuestiones relacionadas