Каким должен быть тип данных в SQL Server для хранения многобайтовых символов? NVARCHAR или VARCHARСохранение многобайта в SQL Server
ответ
Это должно быть либо NCHAR или NVARCHAR ... [Edit] ... после преобразования их в UCS-2.
В обоих случаях это сохраняет символы Unicode (с использованием набора символов UCS-2). Используйте NCHAR для полей с фиксированной длиной (фиксированное количество символов) и NVARCHAR для полей переменной длины.
Преимущество использования UCS-2 заключается в том, что вся вспомогательная логика проще, так как для всех символов требуется всего два байта для хранения. Недостатком является то, что большая часть пространства теряется, если большая часть текста использует в основном символы ASCII.
Благодарим вас, Remus Rusanu, за указание, что многобайтные строки НЕ напрямую совместимы с наборами Unicode UCS. Если вы действительно говорите UTF-8 или UTF-16, он не будет храниться или обрабатываться должным образом SQL-сервером до его преобразования в UCS-2.
Если вы только пытаетесь сделать магазин эти данные, без поиска по ним и т. Д. Формат VARBINARY действительно хорош. В противном случае нужно конвертировать, как я предлагаю. (UCS-2 должен справиться с большинством, но, увы, не все, здесь есть символы).
Если вы хотите сохранить оригинальную строку MB, она становится рискованной. Ваш лучший выбор - фактически varbinary type, так как ни varchar, ни nvarchar не являются правильными типами для строк MB.
На вашем месте я бы преобразовал строку MB в Юникод, используя MultiByteToWideChar, и сохранил ее как NVARCHAR, а при необходимости в thr application снова я бы преобразовал ее из Unicode в строку MB, используя WideCharToMultiByte. Таким образом, данные в базе данных будут согласованными для любого другого использования, которое ожидает строки Unicode и/или Ascii, не так много пользователей готовы обрабатывать строки с несколькими байтами, хранящиеся в виде массивов байтов ...
Его можно сохранить UTF-8 в полях varchar, если вам действительно нужно, но есть целый ряд оговорок.
Нет от готовых инструментов данных будет в состоянии правильно отображать данные без явных преобразований.
Весь набор символов должен ДОЛЖЕН быть отключен в драйверах данных.
Система не должна принимать усеченные данные , если она не понимает границы.
Операции сортировки могут быть неверными для всех алфавитов.
Он работает, если у вас нет другого выбора и вам необходимо поддерживать кодировку, такую как UTF8, без повторной разработки вашего приложения и схемы. Хорошо работает для веб-приложений, где вход и выход основаны на браузере. Сказав все это, я по-прежнему рекомендую переходить на NVARCHAR и конвертировать в UCS2.
- 1. сохранение паролей в SQL Server
- 2. Сохранение расчетов в SQL Server
- 3. Сохранение FlowDocument для SQL Server
- 4. Сохранение потоковых данных в SQL Server 2012
- 5. Сохранение истории в SQL Server 2008?
- 6. Сохранение PDF-файлов в SQL Server
- 7. Сохранение пользовательских значений в SQL Server 2005
- 8. Сохранение действительно большого количества в SQL Server
- 9. Сохранение файла XML в SQL Server
- 10. SQL On Server: Сохранение запросов в файл
- 11. Сохранение данных кривых в таблице SQL Server
- 12. Сохранение многопользовательского поля в SQL Server 2008
- 13. Случайное сохранение данных в SQL Server
- 14. Сохранение пользовательских координат в SQL Server
- 15. Сохранение сообщений Log4Net в SQL Server
- 16. Где сервер запускает сохранение в SQL Server?
- 17. Сохранение 10 десятичных знаков в SQL Server
- 18. UTF-8 для локального многобайта с STL
- 19. SQL Server - сохранение даты и времени
- 20. Сохранение биометрических данных на SQL Server
- 21. Sql Server: сохранение текста и сохранение символов перевода строки?
- 22. Кодирование xml и сохранение на SQL Server
- 23. Как работает сохранение состояния сеанса SQL Server?
- 24. Сохранение информации о времени на SQL Server
- 25. Сохранение базы данных SQL Server из WPF
- 26. Сохранение изображения на SQL Server 2008?
- 27. SQL Server: сохранение данных из VB.NET
- 28. Сохранение обновленных данных gridview на SQL Server?
- 29. SQL Server: Сохранение Иерархическая ACL данных
- 30. SQL Server оптимизирует пакетное сохранение с проверками
Строки MultiByte не Unicode, ни Ascii. Хранение строки MB как любой из этих типов дало бы очень фанковые результаты. –
@Remus Rusanu. Ты прав. Я не понял, что пользователь хотел сохранить «как есть».Я отредактировал соответственно. – mjv
Я не знаю, хочет ли пользователь хранить «как есть» - термины типа «мультибайт» и «Юникод» часто передаются без четкого понимания того, что они на самом деле означают. На SQL Server я бы, конечно, постарался не хранить байты и идти с NVARCHAR, если это вообще возможно. – bobince