Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Почему вместо букв появляются вопросительные знаки при заполнении таблицы T-SQL?

#sql #sql_server


Вот такой код:

CREATE TABLE [dbo].[Employees] (
   [Id]  INT  IDENTITY(1,1)  NOT NULL,
   [Name]        VARCHAR (30)  NOT NULL,
   [Surname]     VARCHAR (30)  NOT NULL,
   [Patronymic]  VARCHAR (30)  NULL,
   [DateofBirth] DATE          NOT NULL,
   [Address]     VARCHAR (160) NOT NULL,
   [Position]    INT NOT NULL,
   [Surcharge]   INT NULL, --надбавка
   PRIMARY KEY  ([Id] )
);


И вот, что получается:
Проблема изображенная в gif-ке

При заполнении таблицы, если писать кириллицой - символы превращаются в вопросительный
знак. Пробовал поменять VARCHAR на NVARCHAR, но не помогло.
    


Ответы

Ответ 1



Пробовал поменять VARCHAR на NVARCHAR, но не помогло. Шаг верный, но этого недостаточно, мы знаем что типы отличаются тем, что NVARCHAR может хранить UNICODE, но он не преобразует данные при вставке в UNICODE. Измененим типы столбцов: CREATE TABLE Employees ( [Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] NVARCHAR (30) NOT NULL, [Surname] NVARCHAR (30) NOT NULL, [Patronymic] NVARCHAR (30) NULL, [DateofBirth] DATE NOT NULL, [Address] NVARCHAR (160) NOT NULL, [Position] INT NOT NULL, [Surcharge] INT NULL --надбавка ); И добавим N (N'Петров') к строковым значениям, тем самым преобразуем данные при вставке в UNICODE. INSERT Employees ([Name],[Surname],[Patronymic],[DateofBirth],[Address],[Position],[Surcharge]) VALUES (N'Иван',N'Федоров',N'Петрович',GETDATE(),N'Где-то там',1,0) Вот так знаки ????? больше вас мучать не будут) Подробнее: Префикс символьных констант Unicode с буквой N указывает на вход UCS-2 или UTF-16, в зависимости от того, используется ли сортировка SC или нет. Без префикса N строка преобразуется в кодовую страницу по умолчанию, которая может не распознавать определенные символы. И сама ссылка на статью: nchar and nvarchar

Ответ 2



Добавте DEFAULT CHARACTER SET (и - для корректной сортировки - тоже DEFAULT COLLATE): CREATE TABLE [dbo].[Employees] ( [Id] INT IDENTITY(1,1) NOT NULL, [Name] VARCHAR (30) NOT NULL, [Surname] VARCHAR (30) NOT NULL, [Patronymic] VARCHAR (30) NULL, [DateofBirth] DATE NOT NULL, [Address] VARCHAR (160) NOT NULL, [Position] INT NOT NULL, [Surcharge] INT NULL, --надбавка PRIMARY KEY ([Id] ) ) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Комментариев нет:

Отправить комментарий