IF OBJECT_ID('TEMPDB.DBO.#language_check', 'U') IS NOT NULL
DROP TABLE #language_check;
CREATE TABLE #language_check (
id INT identity(1, 1) NOT NULL,
language_Used VARCHAR(50),
uni_code NVARCHAR(2000)
)
INSERT INTO #language_check (
language_Used,
uni_code
)
VALUES (
'English',
N'Hello world! this is a text input for the table'
),
(
'German',
N'Gemäß den geltenden Datenschutzgesetzen bitten wir Sie, sich kurz Zeit zu nehmen und die wichtigsten Punkte der Datenschutzerklärung von Google durchzulesen. Dabei geht es nicht um von uns vorgenommene Änderungen, sondern darum, dass Sie sich mit den wichtigsten Punkten vertraut machen sollten. Sie können Ihre Einwilligung jederzeit mit Wirkung für die Zukunft widerrufen.'
),
(
'Spanish',
N'Bajo Rs 30.000, tanto los teléfonos tienen sus propios méritos y deméritos. El OnePlus 3 puntuaciones claramente muy por delante del Xiaomi MI 5 y también mucho más que muchos teléfonos inteligentes insignia en el mercado.'
),
(
'Czech',
N'To je příklad.'
),
(
'Arabic',
N'هذا مثال على ذلك.'
)
SELECT *
FROM #language_check
结果如下。
然后在上表中添加了一个varchar列,结果如下。
当我插入检查结果时,uni_code和nonunicode列都具有相同的值,但对于阿拉伯语言,nonunicode列是“?????”。
提前致谢
答案 0 :(得分:1)
VARCHAR和CHAR数据类型允许ASCII和EXTENDED ASCII集中的字符。阿拉伯语不是该集合的一部分。相比之下,NVARCHAR和NCHAR几乎支持所有角色。这篇SO帖子很好地解释了ASCII类型。
Which "special" characters are allowed in SQL Server varchar fields?
答案 1 :(得分:1)
Varchar和char数据类型只允许包含德语,英语,西班牙语和捷克语以及许多其他字符的特定字符集。除了几个字符外,所有这些语言中的整个字符列表保持不变。要插入阿拉伯语等语言,请使用数据类型作为Nvarchar。您还可以强制表的一列使用特定的排序规则来存储和检索阿拉伯语,但是您可能无法检索特定排序规则不支持的字符。创建表格时,请使用如下所示的整理
CREATE TABLE #language_check
(
id INT identity(1, 1) NOT NULL,
language_Used VARCHAR(50),
uni_code NVARCHAR(2000) ,
nonuni_code VARCHAR (2000) COLLATE Arabic_CI_AS
)
这将允许阿拉伯字符串进入nonuni_code varchar列并检索确切的数据。但是这不会支持像(ÄäËëḦḧÏïN̈n̈ÖöT̈ẗÜüẄẅẌẍÿÿ)这样的少数人物。当您查询#language_check时,您的结果将如图所示。
它不仅取决于数据类型,还取决于整理。在上面的metion表中,我们明确地提到了Arabic_CI_AS的校对名称,因此阿拉伯语和英语将被加入一些特殊的字符串,因此在结果中我们得到的unicode和nonunicode列只有阿拉伯语和英语语言相同而且休息不平等