好的,首先,我对数据库的了解非常有限。
我的下一个问题是:我插入了几行包含荷兰字符的数据,例如不同国家的名称。一些国家在其名称末尾有荷兰语特殊字符 ë,或者像乌克兰在 i 上有两个点(Servië、Oekraïne、Tunesië、Somalië 等...)。数据库中的这些字符如下所示:ë -> A? 和 ï -> AZ。
当然,我希望这些荷兰语字符显示在数据库中。
我已经很习惯使用 COMPRESS()
,并DECOMPRESS()
在内部论坛软件为我公司(目前在SQL Server 2017),而是试图使数据库尽可能高效,是有一个优势,加入_UTF-8
到我的当前归类为Latin1_General_100_CI_AS_SC_UTF8
在未来迁移到 SQL Server 2019?
我以为我读到NLS_CHARACTERSET
了数据库NLS_LANG
的编码和客户端的编码。那是对的吗?
这是否意味着两种编码可以不同?
在其他一些文档中,我读到NLS_LANG
是由NLS_CHARACTERSET
. 哪个断言是正确的?
我的 select case when 语句有问题,我想在 select case when 语句中添加一个新列,我得到了结果,但是?????
因为我已将该列设置为阿拉伯语单词,所以我试图转换新列nvarchar(55)
不幸的是,我得到了相同的结果。
我怎样才能得到正确的结果?
SELECT case when ( CAST(o.startTime as time(7)) > cast(Start as time(7)))
then cast('????' as nvarchar(55))
else cast('????' as nvarchar(55)) end as stat,
userId, FirstName
from Users, TimeTable
Run Code Online (Sandbox Code Playgroud) 我在每晚触发的 SQL 代理作业中使用 sp_send_dbmail。该作业查询我们的数据库并检查产品价格更新,如果有,它将通过电子邮件作为附件发送给我们的电子商务供应商。他们有一些自动流程,他们会更新我们的电子商务平台,但是他们的自动流程无法处理 sp_send_dbmail 提供的文件。sp_send_dbmail 似乎在结果集中的所有字符之间放置了空字符。
查看在十六进制编辑器中打开 csv 的结果:
通过文本编辑器查看我看到的预期:
sp_send_dbmail 在这里查询:
SET @FileName = 'Update_' + CONVERT(VARCHAR(12),GETDATE),105) '.csv'
SET @Query = 'Some Query'
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'me@domain.com'
@query = @Query
@attach_query_result_as_file = 1
@query_attachment_filename = @FileName
@query_result_separator = ','
@query_result_no_padding = 1
END
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
****编辑补充说明****
使用 Microsoft SQL Server 2008 R2 排序规则为 Latin1_General_CI_AS
离开 no_padding 会在每个返回的字段中留下几个尾随空格。每个空格 (20) 由空值 (00) 分隔
如果我有一个类型为binary
或 的列varbinary
,我将数据想象为一个位序列。例如,对我来说,01001
(作为基数 2 的数字)可能是列中的有效值是有意义的binary(5)
。
为什么以这种方式插入和显示二进制数据并不简单?
例如,为什么 SSMS 将二进制数据转换为十六进制,而不是显示一系列 1 和 0(在我看来,这更容易推理)?