If the strings are always going to be unique, you should just use one column. To save on space (albeit might be little) you don't need another ID column. Add a unique ID constraint to the column to force unique values only.
Its up to you if you want to do a check to see if the value exists. Although having it always through a unique ID error IS NOT a proper way of checking if the value already exists in the table. Save the error handling for real errors and do the check manually. Exceptions can take a small performance hit and should be kept for real program exceptions, not the norm.
However, if for some reason, the string is going to be referenced in another column, I would create an ID field. If the string length is 32 characters, it will require 32 bytes of space (assuming ASCII) per record. A 32-bit int as a primary key will only take 4 bytes (32/8=4). So, if you're referencing the string in another table, you'll be saving space by using an integer ID.
Also, if you use an integer ID for the primary key, you might look into clustering the index by the string (if you will do a lot of lookups by the string rather than the ID). Grouping by the string instead of the primary key might do a lot for performance in this case.