【发布时间】:2020-01-08 00:40:56
【问题描述】:
我在 Sql Server 表中有以下两个字段:
当我在字段中添加一些带有重音字符的测试数据时,它实际上存储了它们!我以为我必须将列从 VARCHAR 更改为 NVARCHAR 才能接受重音字符等?
基本上,我认为:
-
VARCHAR= ASCII -
NVARCHAR= Unicode
这是façade等are actually ASCII ..而某些其他字符会出错的情况(如果VARCHAR)?
我可以在 扩展 ASCII 图表中看到 ç 和 é 字符(上面的链接).. 这是否意味着 ASCII 包括 0->127 或 0->255?
(边想:我想我很高兴接受 0->255 并去掉其他任何东西。)
编辑
- 数据库整理:
Latin1_General_CI_AS - 服务器版本:
12.0.5223.6 - 服务器排序:
SQL_Latin1_General_CP1_CI_AS
【问题讨论】:
-
你需要有 NVARCHAR 数据类型。在保存数据时,您需要添加前缀 N' 以避免数据损坏。使用 : N'This home is in prime location...' 在插入和检查中
-
感谢您的评论,但我认为您没有正确阅读我的问题?目前,数据类型是
VARCHAR,目前,数据库正在存储那些重音字符。请重新阅读帖子以查看详细信息和我要问的问题。不过,感谢您阅读我的帖子:) -
抱歉没有准确阅读。如果我使用相同的 varchar 保存,则在我的区域语言中它不起作用。我现在需要阅读更多的 sql :)
-
如果您在数据库中存储非 ASCII 数据,您绝对应该使用
nvarchar列类型。使用varchar列时,128-255 范围内的任何字符都受应用于数据库、表或特定列的COLLATION设置的约束,并且在插入/更新时可能会被破坏。 -
@Pure.Krome 您要求的链接是关于代码页、ASCII 和 Unicode 的维基百科文章。不,
ç不是 ASCII,它不存在于 7 位 US-ASCII 代码页中。它存在于 other 代码页中,例如拉丁语 1。排序规则确实指定了用于处理存储文本的代码页。如果您在阅读时使用了错误的代码页,则会出现乱码。这是非常有据可查的。我怀疑您的数据库使用拉丁 1 排序规则,这就是您可以存储法语字符的原因。不过,您将无法存储希腊语或西里尔字符。
标签: sql-server unicode