2011-12-15 28 views
38

Tại sao thực thể Người dùng FOSUserBundle có hai thuộc tính cho tên người dùng (và các trường khác)?FOSUserBundle: tên người dùng vs tên người dùngCanonical

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

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

Tôi đã đọc tài liệu, duyệt mã nguồn và cố gắng tìm kiếm thông tin và tôi không thể tìm hiểu lý do tại sao nó tồn tại. Dường như luôn luôn lưu trữ các giá trị giống nhau. Tôi chắc chắn có một lý do chính đáng, ai đó có thể lấp đầy tôi không?

Trả lời

59

Trường hợp chuẩn bị rút gọn so với trước khi so sánh hoặc tìm kiếm - để đảm bảo không có trùng lặp nào có cùng giá trị nhưng với trường hợp khác nhau như [email protected][email protected].

+0

Nhưng nếu đối chiếu bảng của bạn được đặt thành một số giá trị không phân biệt chữ hoa chữ thường (như 'utf8_unicode_ci'), có thực sự quan trọng không? – pikachu0

+0

@ pikachu0, không phải tất cả RDBMS đều phân biệt chữ hoa chữ thường. Ví dụ, PostgreSQL - RDBMS tôi sử dụng - là trường hợp nhạy cảm theo mặc định. –

+0

Vâng, đó là lý do tại sao tôi nói * nếu * nó không phân biệt chữ hoa chữ thường. :) – pikachu0

Các vấn đề liên quan