#sql-server #unicode
#sql-server #Юникод
Вопрос:
Мне нужно сохранить 255 символов в столбце базы данных типа nvarchar. Эти символы имеют формат UTF-8 и могут быть многобайтовыми. Я не лучший специалист по кодировкам символов, поэтому я не уверен, имеет ли это смысл. Я хочу содержать 255 символов, которые могут быть на любом языке и т.д.
Комментарии:
1. я абсолютно уверен, что nvarchar (255) должен быть в порядке.
2.
nvarchar
хранит данные в формате UTF-16, а не UTF-8.
Ответ №1:
Вы можете найти некоторую простую для понимания справочную информацию о различных кодировках Unicode в этой главе, которую я написал в руководстве для проекта с открытым исходным кодом. Эта справочная информация поможет вам понять некоторые детали в моем ответе.
В ссылке на документацию об этом, 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)
для обеспечения (удаленной) возможности того, что каждый отдельный символ будет состоять из суррогатных пар.
Ответ №2:
http://msdn.microsoft.com/en-us/library/ms186939.aspx
255 символов.