Nearest Neighbors on mixed data types in high dimensions
Conceptually, there's no reason why this 'could' not work, but practically speaking, there are probably better approaches than using KNN.  

Suitability of KNN

One immediate problem with KNN is that each new instance must be compared to each existing reference instance before a class can be determined. As the number of reference instances increases, the time to classify a new instance increases.  With highly dimensional data, you're going to need a lot of reference instances.

Dimensionality of the Data

If you are set on using KNN, you will want to do everything you can to reduce the number of dimensions, particularly on the categorical columns.  In your example, you may be better off reducing the animals down to some larger groups, for example: [Pet, Domesticated, Wild] or biological family.  If not, once you encode the categorical values, you will maybe have thousands (to millions) of animal columns alone.  If you don't have many examples of each, you're going to match on everything but the animal because
$$Distance\ between:\ dog\ and\ cat = 1$$
$$Distance\ between:\ dog\ and\ giraffe = 1$$
So, this will mean other attributes in the data will likely be more similar, yet, they may be uninformative to the classification process.  For example, number of legs.

On the positive side though, KNN may deal with the introduction of new attributes a little better than others because the classification is based on the currently available data, so adding a new column is not as big a deal as say adding a new column to a neural network, which will need to be retrained to be able to accept a new data set.

Conclusion

While there are other pros and cons to KNN and ways to optimize it for performance; based on your description of the data, and perhaps making a few assumptions, KNN does not sound like a good fit for your classification problem. 

Most models are going to perform better if you can reduce the number of dimensions, but if the number and nature of attributes is relatively static, I would start with something like a Decision Tree.  The benefit of starting with a decision tree is that you can get a feel for the importance of the columns to the class assigned.