Вы можете найти простую для понимания справочную информацию о различных кодировках Unicode в this , главе, которую я написал в руководстве для проекта с открытым исходным кодом. Эта справочная информация поможет вам понять некоторые детали моего ответа.
Ссылка на документацию о nvarchar
, предоставленную Simmo, гласит, что nvarchar
хранится в формате UCS-2. Из-за этого вам нужно будет преобразовать строки UTF-8 в строки UCS-2, прежде чем сохранять их в базе данных. Вы можете найти код C ++ для этого преобразования здесь .
Тонкий, но важный момент заключается в том, что код преобразования фактически преобразуется в UTF-16, который является расширенным набором UCS-2 (UTF-16 поддерживает использование суррогатных пар, а UCS-2 - нет). Я не использую SQL Server, поэтому не знаю, будет ли он жаловаться, если вы попытаетесь вставить в него несколько суррогатных пар. (Возможно, кто-то еще здесь может подтвердить, будет ли это).
Если SQL Server запрещает суррогатные пары, тогда будет ограничение на диапазон языков, которые может поддерживать ваше приложение, но по крайней мере вы знаете, что nvarchar(255)
достаточно для ваших нужд.
С другой стороны, , если SQL Server позволяет использовать суррогатные пары, тогда вы можете использовать nvarchar(510)
, чтобы учесть (удаленную) возможность того, что каждый отдельный символ будет состоять из суррогата пар.