Хранить арабский в базе данных SQL

Я пытался сохранить арабскую строку в базе данных SQL 2008, но она была преобразована в "знак вопроса", почему? и что я должен делать?

6 ответов

Решение

Вам нужно выбрать арабское сопоставление для ваших столбцов varchar/char или использовать Unicode (nchar/nvarchar)

CREATE TABLE #test
(
col1 VARCHAR(100) COLLATE Latin1_General_100_CI_AI,
col2 VARCHAR(100) COLLATE Arabic_CI_AI_KS_WS,
col3 NVARCHAR(100)
)
INSERT INTO #test VALUES(N'لا أتكلم العربية',N'لا أتكلم العربية',N'لا أتكلم العربية')

SELECT * FROM #test

Возвращает

col1                           col2                           col3
------------------------------ ------------------------------ ------------------------------
?? ????? ???????               لا أتكلم العربية               لا أتكلم العربية

Чтобы увидеть список арабских сопоставлений, используйте

SELECT name, description 
FROM fn_helpcollations() 
WHERE name LIKE 'Arabic%'

Все, что вам нужно сделать, это убедиться, что

column Data type является nvarchar()

после этого я без проблем вставил арабский

Вы можете изменить параметры сортировки на уровне базы данных вместо изменения для каждого столбца в базе данных:

USE master;
GO
ALTER DATABASE TestDB
COLLATE Arabic_CI_AI;
GO

Вставить в таблицу (столбец) значения (N'xxx').)

Вы должны поставить N перед строкой, чтобы сделать его Unicode

Добавляйте "N" перед каждым значением. пример:

INSERT INTO table1 VALUES(N'aaaaaaaaa',N'ששששששששששששש',N'aaaaaaaaaaa',N'ششششششششششش')

Тип данных столбца nvarchar ()

INSERT INTO значения CompanyMaster (N'" + txtCompNameAR.Text + "',N'" + txtCompAddressAR.Text + "','" + txtPh.Text + "')

Это полезно, но работайте вот что работает для меня во всех случаях

ALTER DATABASE [database] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

ИДТИ

ALTER DATABASE [база данных] COLLATE ARABIC_CI_AS;

ИДТИ

ALTER DATABASE [база данных] SET MULTI_USER;

ИДТИ

обновление: в конце концов мне нужно изменить тип данных varchar на nvarchar в моем проекте

Убедитесь, что все ваши столы и varchar столбцы имеют сопоставление utf8_general_ci

Iti легко хранить арабские строки в Oracle. Используйте этот код:

declare @P_CUSTOMER_NAME  nchar(50) 
set @P_CUSTOMER_NAME2=N'أختبار'

Вышесказанное сохранит в Oracle просто отлично.

Другие вопросы по тегам