Типы данных и репликация. Nchar тип данных sql


Типы данных и репликация | Microsoft Docs

  • 01/14/2011
  • Время чтения: 6 мин

В этой статье

SQL Server Compact поддерживает не все типы данных, поддерживаемые SQL Server. Приложение SQL Server Compact, являющееся подписчиком публикации SQL Server, должно сопоставлять неподдерживаемые типы данных с поддерживаемыми.

Поддерживаемые типы данных и сопоставления типов данных

В следующей таблице указаны сопоставления типов данных, выполняемые при репликации между SQL Server и Microsoft SQL Server Compact 3.5. В таблице перечисляются сопоставления для каждого типа данных SQL Server и описываются ограничения и особое поведение.

Тип данных SQL Server Тип данных SQL Server Compact

bigint

Bigint

binary(n)

binary(n)

bit

Bit

character(n)(синоним: char(n))

national character(n) или ntext

Если размер данных составляет 4000 символов или менее, репликация SQL Server Compact сопоставляет тип данных SQL Server character с типом SQL Server Compact national character. В противном случае символьные данные сопоставляются с типом SQL Server Compact ntext. Если размер данных типа ntext превышает размер столбца типа character, в процессе отправки данных из базы данных SQL Server Compact в базу данных SQL Server возникает сбой синхронизации.

character varying(n)(синоним: varchar(n)) varchar(n))

national character varying или ntext

Если размер данных составляет 4000 символов или менее, репликация SQL Server Compact сопоставляет данные типа SQL Server character varying с данными типа SQL Server Compact national character varying. В противном случае эти данные сопоставляются с типом данных SQL Server Compact ntext. Если размер данных типа ntext превышает размер столбца типа character varying, в процессе отправки данных из базы данных SQL Server Compact в базу данных SQL Server возникает сбой синхронизации.

character varying(MAX)(синоним: varchar(MAX))

ntext

Если размер данных типа character varying(MAX) превышает размер столбца типа ntext, в процессе отправки данных из базы данных SQL Server в базу данных SQL Server Compact возникает сбой синхронизации.

Computed Columns

Не поддерживается.

Если при настройке параметров с помощью мастера публикации указывается, что будут использоваться подписки SQL Server Compact, все столбцы типа Computed Column будут вертикально секционированы из публикации. Если мастер не используется, необходимо исключить из публикации столбцы, содержащие данные этого типа.

date

Значение типа nchar(10) в формате «ГГГГ-ММ-ДД»

Примечание.

SQL Server Compact хранит расширенные знаки. Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

datetime

Datetime

datetime2

Значение nvarchar(27) в формате «ГГГГ-ММ-ДД-чч:мм:сс.ннннннн»

Примечание.

SQL Server Compact хранит расширенные знаки. Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

datetimeoffset

Значение nvarchar(34) в формате «ГГГГ-ММ-ДД-чч:мм:сс.ннннннн [+/-] чч:мм»

Примечание.

SQL Server Compact хранит расширенные знаки. Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

decimal

Не поддерживается. Используйте тип numeric.

double precision

double precision

float

float

geography

image

Примечание.

Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

geometry

image

Примечание.

Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

image

image

integer(синоним: int)

integer

money

money

national character(n)(синоним: nchar(n)) nchar(n))

national character(n)

national character varying(n)(синоним: nvarchar(n)) nvarchar(n))

national character varying(n)

national character varying(MAX)(синоним: nvarchar(MAX)) nvarchar(MAX))

ntext

Если размер данных типа national character varying(MAX) превышает размер столбца типа ntext, в процессе отправки данных из базы данных SQL Server в базу данных SQL Server Compact возникает сбой синхронизации.

ntext

ntext

numeric(синоним: decimal, dec)

numeric

real

Real

smalldatetime

datetime

Если точность данных типа datetime превышает точность столбца типа smalldatetime, при отправке данных из базы данных SQL Server Compact в базу данных SQL Server происходит сбой синхронизации.

smallint (int 2)

smallint (int 2)

smallmoney

money

Если точность данных типа money превышает точность столбца типа smallmoney, при отправке данных из базы данных SQL Server Compact в базу данных SQL Server происходит сбой синхронизации.

sql_variant

ntext

Если в столбце sql_variant содержатся двоичные данные, размер этих данных должен быть кратен 2. В противном случае возникнет ошибка преобразования.

text

ntext

Если размер данных типа text превышает 1 073 741 823 символа, при отправке данных из базы данных SQL Server в базу данных SQL Server Compact произойдет сбой синхронизации.

time

Значение nvarchar(16) в формате «чч:мм:сс.ннннннн»

Примечание.

SQL Server Compact хранит расширенные знаки. Поддержка преобразования этого типа была предоставлена в версии SQL Server Compact 3.5 с пакетом обновления 1 (SP1).

timestamp

Не поддерживается.

Если при настройке параметров с помощью мастера публикации указывается, что будут использоваться подписки SQL Server Compact, все столбцы типа timestamp будут вертикально секционированы из публикации. Если мастер не используется, необходимо исключить из публикации столбцы, содержащие данные этого типа. Если столбец timestamp/rowversion не был вертикально секционирован, то данные в столбце не реплицируются.

tinyint

tinyint

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n)

varbinary(MAX)

image

Если размер данных типа varbinary(MAX) превышает размер столбца типа image, в процессе отправки данных из базы данных SQL Server в базу данных SQL Server Compact возникает сбой синхронизации.

varchar

См. тип character varying

XML

ntext

Если возможно, следует выбирать типы данных, которые поддерживаются как SQL Server, так и SQL Server Compact. При этом в процессе репликации не придется выполнять сопоставление данных. Если это невозможно, приложение должно проверять значения, хранящиеся в базе данных SQL Server Compact, чтобы гарантировать, что при репликации можно будет сопоставить значения SQL Server и SQL Server Compact.

Существующим приложениям, не поддерживавшим изначально типы date, datetime2, datetimeoffset и time, придется обрабатывать данные, сопоставленные с совместимыми типами данных, например nchar и nvarchar. Дополнительные сведения о типах данных SQL Server см. в разделе Типы данных в электронной документации SQL Server.

Ограничения для типов данных

На подписчиков SQL Server Compact налагаются следующие ограничения.

  • ИндексыНе поддерживается публикация таблиц с индексами по столбцам типа varchar (MAX), nvarchar(MAX), varbinary(MAX) и XML. При создании подписки SQL Server Compact для подобных таблиц произойдет сбой, поскольку эти типы столбцов сопоставляются с типами ntext или image, а для подобных столбцов нельзя создать первичный ключ.
  • Столбцы идентификаторовСтолбцы идентификаторов SQL Server Compact должны иметь тип integer (int 4) или bigint (int 8). Столбцы идентификаторов SQL Server Compact не могут иметь тип smallint, tinyint, decimal или numeric. Если в публикации, на которую выполнена подписка, столбцы идентификаторов не принадлежат к типу integer (int 4) или bigint (int 8), при создании этой подписки для SQL Server Compact произойдет сбой.SQL Server Compact позволяет изменять начальное значение и приращение в базе данных подписчика с помощью инструкций ALTER TABLE имя_таблицы ALTER COLUMN имя_столбца IDENTITY (начальное значение, приращение). Это позволяет вручную управлять диапазонами идентификаторов. Однако если публикация включает столбец идентификаторов и диапазон идентификаторов регулируется издателем, в базе данных подписчика не следует изменять начальное значение и приращение. Если указать начальное значение, выходящее за верхнюю границу выделенного диапазона идентификаторов, SQL Server Compact возвратит сообщение об ошибке при вставке новой записи в таблицу. При следующей синхронизации издатель устранит эту проблему путем выделения данному подписчику нового диапазона идентификаторов.
  • Неподдерживаемые типы данныхПри подписке на публикацию SQL Server 2005 не поддерживаются типы данных computed column, timestamp, date, time, hierarchyid, filestream и utcdatetime.
  • Типы данных CHAR и NTEXT в SQL Server и SQL Server CompactSQL Server позволяет, чтобы тип данных CHAR имел больший размер, чем тип данных CHAR для SQL Server Compact. Чтобы реплицировать соответствующее содержимое, в SQL Server Compact тип данных CHAR большого размера преобразуется в тип данных NTEXT. Хотя SQL Server и SQL Server Compact позволяют изменять тип данных столбца CHAR, ни один из этих продуктов не позволяет изменять тип данных столбца NTEXT. Поэтому, хотя на стороне SQL Server тип данных CHAR большого размера можно изменить, на стороне SQL Server Compact изменение невозможно, поскольку соответствующий тип данных больше не является типом CHAR.
  • Типы данных NTEXT или IMAGEЕсли столбец сопоставлен с типом ntext, а SQL Server изменяет тип данных для этого столбца на тип char, nchar и т. п., у столбца в базе данных SQL Server Compact остается тип ntext, пока не будет выполнена повторная инициализация подписчика.

См. также

Основные понятия

Типы данных и удаленный доступ к данным

Другие ресурсы

Управляемое сопоставление типов данных (SQL Server Compact)

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)

msdn.microsoft.com

Для чего нужен тип данных национального характера SQL (NCHAR)? MS SQL Server

«НАЦИОНАЛЬНЫЙ» в данном случае означает символы, характерные для разных национальностей. На дальневосточных языках особенно много персонажей, что одного байта недостаточно, чтобы отличить их всех. Поэтому, если у вас есть английское (ascii) -одно приложение или только английское поле , вы можете уйти, используя старые типы CHAR и VARCHAR, которые допускают только один байт на символ.

Тем не менее, большую часть времени вы должны использовать NCHAR / NVARCHAR. Даже если вы не считаете, что вам необходимо поддерживать (или потенциально поддерживать) несколько языков в ваших данных, даже русскоязычные приложения должны иметь возможность разумно обрабатывать атаки с использованием символов иностранного языка.

На мой взгляд, единственное место, где все еще предпочтительнее старые типы CHAR / VARCHAR, – это часто используемые внутренние коды и данные, основанные на ascii, на таких платформах, как Sql Server, которые поддерживают различие – данные, которые будут эквивалентны enum в язык клиента, такой как C ++ или C #.

В Oracle набор символов базы данных может быть многобайтным набором символов, поэтому вы можете хранить всевозможные символы там … но вам нужно понять и определить длину столбцов соответствующим образом (либо в байтах, либо в CHARACTERS) ,

NVARCHAR дает вам возможность иметь набор символов базы данных, который является однобайтным (что уменьшает вероятность путаницы между столбцами BYTE или CHARACTER) и использует NVARCHAR как многобайтовый. См. Здесь .

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

Между тем стандарт SQL92 объясняет эту функцию еще менее благосклонно, указывая только на то, что НАЦИОНАЛЬНЫЙ ХАРАКТЕР хранится в определенном реализацией наборе символов. В отличие от простого ХАРАКТЕРА, который хранится в наборе символов, определенных реализацией. Каким может быть другой набор символов, определенный реализацией. Или нет.

По совпадению, это то же «отличие», что стандарт C ++ делает между char и wchar_t . Реликвия Темных Возрастов Кодировки Символа, когда каждая комбинация языка / ОС имеет свой собственный набор символов.

Следует ли использовать NVARCHAR для всех характерных (не двоичных) целей хранения?

Не важно, является ли объявленный тип вашей колонки VARCHAR или NVARCHAR . Но важно использовать Unicode (UTF-8, UTF-16 или UTF-32) для всех целей хранения символов.

Существуют ли в настоящее время популярные СУБД, в которых он будет делать что-то нежелательное

Да. В MS SQL Server, используя NCHAR ваши (английские) данные занимают в два раза больше места. К сожалению, UTF-8 пока не поддерживается .

sqlserver.bilee.com

Типы данных MySQL | SQL Программирование

Числовые типы данных MySQL имеют следующие дополнительные атрибуты.

UNSIGNED

Предполагается, что данное числовое значение будет неотрицательным (то есть положительным или равным нулю). То место в памяти, которое обеспечивает возможность хранить положительные или отрицательные значения в фиксированных типах данных, таких, как DECIMAL и NUMERIC, используется для хранения части числа, и это несколько увеличивает диапазон по сравнению с DECIMAL и NUMERIC. (Дополнительного атрибута SIGNED в данном случае нет.)

ZER0F1LL

Этот атрибут, используемый для отображения форматирования, заставляет MySQL дополнять числовые значения до полного размера нулями, а не пробелами. При использовании атрибута ZEROFILL автоматически включается атрибут UNSIGNED. В MySQL также принудительно вводится ограничение на отображаемый размер столбцов, составляющее 255 символов. Столбцы с данными, превышающими по длине 255 символов, хранятся должным образом, но отображаются из них только 255 символов. Числовые типы с плавающей точкой могут иметь после десятичной точки не более 30 цифр.

В приводимом ниже перечне видно, что MySQL поддерживает большую часть типов SQL 2003, а также в нем есть несколько дополнительных типов для хранения списков значений, а также больших двоичных объектов (BLOB). К расширениям стандарта ANSI относятся типы TEXT, ENUM, SET и MEDIUMINT. К специальным атрибутам, выходящим за рамки стандарта ANSI, также относятся AUTOINCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL.

BIGINT[(n)] [UNSIGNED] [ZEROFILL] (тип данных SQL 2003: BIGINT)

Хранит числа со знаком и без знака. Диапазон для чисел со знаком составляет от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Диапазон для чисел без знака составляет от 0 до 18 146 744 073 709 551 615. При использовании типа BIGINT вычисления могут быть неточными из-за округлений.

BIT, BOOL (тип данных SQL 2003: отсутствует)

Синоним TINYINT.

BLOB (тип данных SQL 2003: BLOB)

Хранит до 65 535 байт данных. Поддержка индексирования столбцов BLOB есть только в версиях MySQL 3.23.2 и выше (этой возможности нет больше ни в одной из рассматриваемых в книге платформ). В MySQL тип BLOB функционально эквивалентен типу MySQL VARCHAR BINARY (который обсуждается ниже) с заданным по умолчанию верхним ограничением на размер. При сравнении данных типа BLOB нужно всегда учитывать регистр. Отличие этого типа от используемого в MySQL типа VARCHAR BINARY состоит в том, что нельзя устанавливать значения по умолчанию (DEFAULT), а также в том, что в BLOB не удаляются заключительные пробелы. К столбцам BLOB не следует применять операции GROUP BY и ORDER BY. Они также хранятся отдельно от таблицы, в то время как все прочие типы данных MySQL сохраняются в структуре самого файла таблицы.

CHAR(n) [BINARY], CHARACTER [BINARY] (тип данных SQL 2003: CHARACTER))

Содержит символьную строку фиксированной длины от 1 до 255 символов. При сохранении значений тип CHAR дополняется пробелами, а при извлечении пробелы обрезаются, как в типе ANSI SQL 2003 VARCHAR. Атрибут BINARY позволяет производить поиск двоичных данных, а не только словарный поиск без учета регистра.

DATE (тип данных SQL 2003: DATE)

Хранит дату в диапазоне от 1000-01-01 до 9999-12-31 (ограниченную кавычками). По умолчанию MySQL отображает эти значения в формате ГГГГ-ММ-ДД, хотя пользователь может указать и какой-нибудь другой формат отображения.

DAТЕ TIME (тип данных SQL 2003: TIMESTAMP)

Хранит значение даты и времени в диапазоне от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.

DECIMAL [р, (я)] [ZEROFILL] (тип данных SQL 2003: DECIMAL(PRECISION, SCALE))

Хранит точные числовые значения в виде строк, используя один символ для каждой цифры. Если точность не указана, она принимается равной 10, а масштаб (если не указан) — равным нулю.

INT [EGER] [UNSIGNED] [ZEROFILL] [AUTO [INCREMENT] (тип данных SQL 2003: INT, INTEGER)

Хранит целые числа со знаком и без знака в диапазоне от -2 147 483 648 до 2 147 483 647 для таблиц с индексно-последовательным методом доступа (ISAM). Для чисел без знака допустимый диапазон в таблицах ISAM — от 0 до 4 294 967 295. В других типах таблиц диапазон значений несколько отличается. Атрибут AUTO INCREMENT доступен для всех вариантов типа INT. Этот атрибут создает для каждой вновь добавляемой строки уникальный идентификатор строки. (За дополнительной информацией об атрибуте AUTO INCREMENT обращайтесь к разделу «Инструкция CREATE/ALTER TABLE» главы 3.)

LONGBLOB (тип данных SQL 2003: BINARY LARGE OBJECT)

Хранит данные BLOB длиной до 4 294 967 295 символов. Заметьте, что для некоторых протоколов связи клиент/сервер такой объем данных может оказаться слишком большим.

LONGTEXT (тип данных SQL 2003: CLOB)

Хранит данные типа TEXT длиной до 4 294 967 295 символов. Заметьте, что для некоторых протоколов связи клиент/сервер такой объем данных может оказаться слишком большим.

MED1UMBLOB (тип данных SQL 2003: отсутствует)

Хранит данные типа BLOB длиной до 16 777 215 символов.

MEDIUMTEXT (тип данных SQL 2003: отсутствует)

Хранит данные типа TEXT длиной до 16 777 215 символов.

MEDIUMINTf(n)] [UNSIGNED] [ZEROFILL] (тип данных SQL 2003: отсутствует)

Хранит целые числа со знаком и без знака в диапазоне от 8 388 608 до -8 388 608. Диапазон для чисел без знака — от 0 до 16 777 215.

NCHAR(n) [BINARY], [NATIONAL] CHAR(n) [BINARY] (тип данных SQL 2003: NCHAR(n))

Синонимы для CHAR. Типы NCHAR обеспечивают поддержку набора UNICODE, начиная с MySQL 4.1.

NUMERIC(p, s) (тип данных SQL 2003: DECIMAL) Синоним типа DECIMAL.

NVARCHAR(n) [BINARY], [NATIONAL] VARCHAR(n) [BINARY], NATIONAL CHAR

VARYING(n) [BINARY] (тип данных SQL 2003: NCHAR VARYING)

Синонимы типа VARYING [BINARY]. Хранит символьные строки переменной длины до 255 символов. Если не используется ключевое слово BINARY, значения хранятся и сравниваются без учета регистра.

REAL (тип данных SQL 2003: REAL) Синоним типа DOUBLE PRECISION.

SЕТ(«знач1», «знач2», …п) (тип данных SQL 2003: отсутствует)

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

SMALLINT[(n)] [UNSIGNED] [ZEROFILL] (тип данных SQL 2003: SMALLINT)

Хранит целые числа со знаком или без знака. Диапазон для чисел со знаком — от -32 768 до 32 767. Диапазон для чисел без знака — от 0 до 65 535.

TEXT (тип данных SQL 2003: отсутствует)

Хранит до 65 535 символов данных. Данные типа TEXT хранятся отдельно от таблиц, в то время как остальные типы хранятся в структуре файла соответствующей таблицы. Тип TEXT функционально эквивалентен типу VARCHAR без указания верхней границы (за исключением максимального размера столбца). Сравнение выполняется без учета регистра. Тип TEXT отличается от стандартного типа VARCHAR тем, что нельзя указывать значения по умолчанию (DEFAULT), а также тем, что в ТЕХТ удаляются заключительные пробелы. К столбцам TEXT не следует применять операции GROUP BY и ORDER BY. Кроме того, поддержка индексирования столбцов TEXT появилась только в MySQL 3.23.2 и выше.

Источник

Похожие публикации

new-techs.ru

Типы данных nvarchar2,nchar

Вопрос: FAQ: Использование CAST, CONVERT, CASE в MS Access, параметры SQL в Excel, и др.

Всем привет.Поскольку недавно мне пришлось разбираться с этими проблемами, и, как я понял, это частые вопросы, решил поделиться приобретенным опытом, и написать здесь несколько ответов. Прошу критиковать и корректировать ошибки.

Итак, вы, по привычке, пишете в запросе CAST/CONVERT/CASE, и оно не работает. И не будет. :( В провайдерах (драйверах), которые обрабатывают запросы к файлам Access, Excel такой функции нет. Поэтому работать из Access с SQL Server (когда вы делаете связанную таблицу) и из SQL Server с Access/Excel неудобно. Исключения - запрос из кода VBA и в Excel - подключение к данным SQL Server'а (БЕЗ!! использования Microsoft Query).

1. Конверсия типов. Для конверсии типов в Access используются функции Cint, CLng, CSng, CDbl, CStr, CBool, CDate и другие аналогичные. Есть проблема - они не воспринимают NULL, и возвращают ошибку.

2. Использование алиасов в Access требует обязательного указания ключевого слова AS

3. CASE в Access тоже нет, но есть функция, позволяющая частично заменить его: IIf(условие, что_если_истина, что_если_ложь). При помощи неё также можно обойти ограничение, указанное в пункте 1: iif(поле IS NULL, NULL, CInt(поле)) AS Alias

4. Если вы из SQL Server работаете с файлом Access/Excel через драйвер ADO, то все эти ограничения присутствуют в полной мере. Более того, Excel, например, определяет тип данных в поле по первым 8 строкам, и если значения там пусты, то тип данных устанавливается nchar или ntext. В этом случае ваш запрос может вызывать ошибки при конверсии типов. Особенно, когда у вас файл Excel сохранен в одном locale, а на SQL Server - другой. Но и здесь есть решение.

SELECT field1, field2 FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0' , 'Excel 12.0; Database='+@ExcelFileName+'; HDR=No' , 'SELECT iif(F1 IS NULL, NULL, CSng(F1)) AS field1, F2 AS field2 FROM [Sheet1$B4:C]') As t В этом примере куча решений :) 4.1. идёт выборка, ограниченная в левом углу ячейкой B4, а в правом - последней заполненной ячейкой столбца C. 4.2. игнорируются имена колонок, и колонки автоматически именуются по-порядку: F1, F2 4.3. конверсия типа происходит на стороне драйвера ADO, поэтому используется locale целевого файла (@ExcelFileName). 4.4. во внешний запрос (SQL Server'у) передаются уже колонки с новыми именами, и во внешнем запросе с этими данными можно делать уже что угодно, используя синтаксис SQL Server'а.

5. Если вам нужно передать параметр из ячейки Excel в запрос к SQL Server, тот тут 2 пути: простой и сложный. :) 5.1. Простой: использовать Microsoft Query, в запросе в качестве параметров указать знак ?.

SELECT field1 FROM table AS t WHERE field2 = ? AND field3 = ? AND NOT field4 = ? .Выполнить запрос, при запросе параметров указать любые значения, подходящие к типу поля.Затем, в свойствах запроса станет доступной кнопка "Параметры", нажав на которую, вы сможете установить, из какой ячейки брать значение параметра (и поставить очень нужную галочку "при изменении значения заново выполнять запрос"). Перечень параметров в порядке появления их в запросе.Минусы этого способа: функционал Microsoft Query остался на уровне 1997, наверное, года. Никаких функций типа CASE там не будет. Можно попробовать iif, я не пробовал.5.2. Сложный: написать макрос на VBA, который сделает всё это. Этот вариант полнофункциональный, т.к. в нем можно будет использовать все возможности SQL Server, но главный, кмк, для него минус - он потребует сохранения файла в формате xlsm. Если по каким-то причинам у вас это недопустимо (или нежелательно), прийдётся изворачиваться.

Ну, как-то так.

Для поиска:Как сделать конверсию типов в Access? Cast и Convert в AccessCase в Access, ExcelПодключиться к Access, Excel из SQL Serverпараметр SQL parameter из ячейки Excel

forundex.ru