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 列具有相同的值,但对于阿拉伯语非 unicode 列是“??????”。
- 谁能详细说明一下 uni_code 和 uni_code 具有相同值背后的原因吗? 非unicode 列。
- 为什么对于阿拉伯语,两列不相同。
提前致谢
最佳答案
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̈ẗ Üü Ẅẅ Ẍẍ ŸY)。当您查询#language_check时,您的结果将如图所示。
它不仅取决于数据类型,还取决于排序规则。在上面的提及表中,我们明确提及了阿拉伯语_CI_AS 的排序规则名称,因此阿拉伯语和英语将接受一些特殊字符,因此在结果中我们得到的 unicode 和非 unicode 列对于仅阿拉伯语和英语而言是相同的,其余的不相等
关于sql-server - nvarchar 和 varchar 显示相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716816/