I think you're looking for [column level encryption][1]. It allows you to encrypt specific columns in your database, in your case the cloumn "country". Another way would be to use [database encryption][2], which can encrypt an entire database. The main disadvantage there would be the speed, because the size of the data to encrypt / decrypt is larger than just the data in a single column. Just be sure to store the encryption key securely. You can find more information about this topic in this post: [SecuritySE - Where to store a server side encryption key][3]. Edit: > My question is not tied to the specific case of the column of a table. Rather, I am asking what are the algorithms to use when the dictionary size is small. You could simply use a [symmetric-key algorithm][4], i.e. [AES][5] in CTR mode to protect your data. It works for both small and large data. [1]: https://en.wikipedia.org/wiki/Column_level_encryption [2]: https://en.wikipedia.org/wiki/Database_encryption [3]: https://security.stackexchange.com/questions/12332/where-to-store-a-server-side-encryption-key [4]: https://en.wikipedia.org/wiki/Symmetric-key_algorithm [5]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard