Yes, use a separate rectangle. You shouldn't get it directly from your sprite, but from the logical entity class that represents your character. It is likely that such a class stores other logics-related properties, such as velocity, hitpoints, ...
Since the collision rectangle is the same for all characters of the same type, you don't need to store it in every instance -- instead you could have a central data table with this attribute. Don't make it global, but rather a member of another class.
struct CharacterData // one instance for each different character type
{
sf::FloatRect collisionRect;
int maxHitpoints;
float maxSpeed;
...
};
std::vector<CharacterData> table;