转换/广播nvarchar

nofu1

成员
已加入
2020年10月30日
留言内容
23
编程经验
Beginner
大家好;

这一直困扰着我一段时间。我有一个与此类似的表格结构来容纳法语单词
C#:
create table metest
(
 id numeric
 ,desc_info nvarchar

)

因此,我知道nvarchar倾向于将数据存储为字节,因此当我从metest写入select id desc_info时,如何确保desc_info显示法语符号。我没有看到像(')这样的法语符号,而是看到了一些奇怪的symbot
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
您的应用程序和数据库之间没有任何关系。默认情况下,.NET字符串是Unicode。如果保存正确的数据,则将检索正确的数据。如果看不到正确的数据,则说明是在保存之前或在检索之后将其破坏了。我们不知道您在两端做什么,所以我们不知道它在哪里破裂。我建议您首先在两端调试应用程序,以确保数据始终是您期望的数据,如果不是,请查看数据在哪里。如果您仍然无法解决问题,则至少可以向我们提供所有相关信息。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
我知道nvarchar倾向于将数据存储为字节
You don't know that at all. At the lowest level, all data is stored as bytes because that's all a computer can store. The nvarchar data type is no different to any other in that regard. At a higher level though, nvarchar data is stored as text, just like varchar data is. In either case, you simply save or retrieve a String in your .NET code and the database takes care of any encoding details based on the data type.
 

nofu1

成员
已加入
2020年10月30日
留言内容
23
编程经验
Beginner
You don't know that at all. At the lowest level, all data is stored as bytes because that's all a computer can store. The nvarchar data type is no different to any other in that regard. At a higher level though, nvarchar data is stored as text, just like varchar data is. In either case, you simply save or retrieve a String in your .NET code and the database takes care of any encoding details based on the data type.
嗨,jmcihinney,每当我在SSMS中写一个查询时,我都会看到一个奇怪的法语字符符号,而我怎么能看到实际的符号呢。请注意,这不是.net代码
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
该站点专用于C#编程,并且SQL Server论坛旨在解决与SQL Server相关的C#问题。该论坛的描述是:
有关使用C#开发SQL Server和MSDE的讨论
我不会关闭此线程,但请记住将来。您可能会发现专用SQL Server站点更适合于专用SQL Server问题。始终提供所有相关信息也很重要。如果您的问题是特定于SSMS中的查询的,那么这是相关信息。
 

nofu1

成员
已加入
2020年10月30日
留言内容
23
编程经验
Beginner
好的,我不知道,所以我的问题与下面的示例有关,我可以将以下单词s'il vousplaît保存在名为desc_info的nvarchar(2000)列中,但是当我编写metest中的select *时,该单词在SSMS中无法正确显示。当我在SSMS中编写选择语句时,如何显示s'il vousplaît
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
我只是使用SSMS将您的帖子中的法语文本复制到了表格中,而且看到重音符号没有问题。您使用的是哪个版本的SQL Server和SSMS,数据库的排序规则是什么?
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+
根据我的经验,排序规则是处理国际化和SQL Server时要考虑的关键设置。
 

nofu1

成员
已加入
2020年10月30日
留言内容
23
编程经验
Beginner
我只是使用SSMS将您的帖子中的法语文本复制到了表格中,而且看到重音符号没有问题。您使用的是哪个版本的SQL Server和SSMS,数据库的排序规则是什么?
我正在使用Microsoft SQL Server 2019-15.0,SSMS 18.7.1和Latin1_General_CI_AS,但我尝试在如下所示的查询中将其更改为其他排序规则

C#:
select id, desc_info collate Latin1_General from metest

但被告知这是无效的整理
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+
我可以将以下单词s'il vousplaît保存在名为desc_info的nvarchar(2000)列中
您如何准确地保存单词?您指出您没有使用C#,那么您要使用哪种语言写入数据库?该语言如何处理Unicode字符串?尤其是注定要存储在SQL Server中的Unicode字符串?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
我直接将您的文本复制到SSMS中,没有任何问题。你能做到吗?如果可以的话,看来问题确实在于您如何将数据获取到数据库中,因此,关于SSMS的任何讨论实际上都没有关系。
 

nofu1

成员
已加入
2020年10月30日
留言内容
23
编程经验
Beginner
抱歉,回复晚了,源是一个csv文件,我正在尝试几种修复方法。而且我注意到我不得不重新设计表以使用所有nvarchar列,并使用SSDT作为unicode导入数据以使其正常工作,这让我觉得有些奇怪。

不过,这只是另一个快速的问题,
要求
如果您有两个csv文件,并且其中一个csv包含两列,而另一个csv包含4列。

潜在的解决方案
您是否需要创建两个不同的表并确保您的表都具有nvarchar列,并且同样要创建两个不同的数据流以使用SSDT将其导入数据库中

还是有更好的方法来做到这一点。

提前致谢
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,538
地点
弗吉尼亚州切萨皮克
编程经验
10+
这意味着创建CSV文件的人员将数据保存到在特定代码页中编码的CSV中,而不是将CSV保存为UTF-8。您必须找到那个人并且 打他们的头和肩膀 问他们使用什么代码页,以便您可以将数据重新加载为Unicode,然后以Unicode形式存储到数据库中。
 
最佳 底部