Хранить арабский в базе данных 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 просто отлично.