Skip to content

Посты

NVarchar против Varchar

5 августа 2020 г. • 2 мин чтения

NVarchar против Varchar

Каждый инженер, определяющий новый строковый столбец, решает: использовать ли nvarchar или varchar?

С тех пор как я открыл для себя nvarchar, я всегда использую nvarchar. Моя мысль такова: зачем использовать тип данных, который может не поддерживать текстовое значение, и вы, скорее всего, не обнаружите несовместимое значение до тех пор, пока оно не окажется в продакшене.

Я слышу аргумент о месте, но место дешево и не стоит беспокойства. Я знаю, о чем вы думаете, стоимость не имеет значения, когда жесткий диск полон, и я согласен.

Начиная с Sql Server 2008 R2 сжатие данных применяется к полям nchar и nvarchar (исключая nvarchar(max)). В зависимости от данных эффективность сжатия варьируется, но с английским языком достигается 50% сжатие, что ставит его наравне с потребностями varchar в пространстве (1).

Еще одна вещь, которую стоит учесть, это то, что большинство языков программирования поддерживают UTF-16 как тип строки. Поэтому каждый раз, когда varchar загружается из базы данных, он преобразуется в UTF-16 (nvarchar-подобный)

Этот ответ на StackOverflow резюмирует nvarchar против varchar:

Столбец nvarchar может хранить любые данные Unicode. Столбец varchar ограничен 8-битной кодовой страницей. Некоторые люди думают, что varchar следует использовать, потому что он занимает меньше места. Я считаю, что это неправильный ответ. Несовместимость кодовых страниц - это боль, а Unicode - лекарство от проблем с кодовыми страницами. При дешевых дисках и памяти в наши дни действительно нет причин тратить время на возню с кодовыми страницами.

Все современные операционные системы и платформы разработки используют Unicode внутренне. Используя nvarchar вместо varchar, вы можете избежать преобразований кодировки каждый раз, когда читаете из базы данных или записываете в нее. Преобразования занимают время и подвержены ошибкам. А восстановление после ошибок преобразования - нетривиальная проблема.

Если вы взаимодействуете с приложением, которое использует только ASCII, я все равно рекомендую использовать Unicode в базе данных. Алгоритмы сортировки ОС и базы данных будут работать лучше с Unicode. Unicode избегает проблем преобразования при взаимодействии с другими системами. И вы будете готовиться к будущему. И вы всегда можете проверить, что ваши данные ограничены 7-битным ASCII для любой устаревшей системы, которую вам приходится поддерживать, даже наслаждаясь некоторыми преимуществами полного хранения Unicode. (2)

Мой вывод заключается в том, что единственное время, когда данные являются varchar, это когда они находятся в покое.

Ссылки:

1. Unicode Compression implementation
2. What is the difference between varchar and nvarchar?

Автор: Чак Конвей специализируется на разработке программного обеспечения и генеративном ИИ. Свяжитесь с ним в социальных сетях: X (@chuckconway) или посетите его на YouTube.

↑ Наверх

Вам также может понравиться