2011-12-15 15 views
38

¿Por qué la entidad de usuario FOSUserBundle tiene dos propiedades para un nombre de usuario (y otros campos)?FOSUserBundle: nombre de usuario vs nombre de usuario canónico

/** 
* @var string 
*/ 
protected $username; 

/** 
* @var string 
*/ 
protected $usernameCanonical; 

He leído la documentación, levantase el código fuente, y trataron de buscar información, y no puedo averiguar por qué existe. Parece que siempre almacena los mismos valores. Estoy seguro de que hay una buena razón, ¿alguien puede informarme?

Respuesta

59

Los campos canónicos se ponen en minúscula antes de la comparación o búsqueda - para asegurarse de que no haya duplicados con el mismo valor pero con casos diferentes como [email protected] y [email protected].

+0

Pero si la intercalación de la tabla está configurada en algún valor insensible a mayúsculas y minúsculas (como 'utf8_unicode_ci'), ¿realmente importa? – pikachu0

+0

@ pikachu0, no todos los RDBMS no distinguen entre mayúsculas y minúsculas. Por ejemplo, PostgreSQL, el RDBMS que uso, distingue entre mayúsculas y minúsculas por defecto. –

+0

Sí, es por eso que dije * si * no distingue entre mayúsculas y minúsculas. :) – pikachu0