从 SQL Server 读取 nvarchar 时带菱形的问号
Posted
技术标签:
【中文标题】从 SQL Server 读取 nvarchar 时带菱形的问号【英文标题】:Question mark with diamond when read nvarchar from SQL Server 【发布时间】:2020-10-01 05:21:35 【问题描述】:我在这里遇到了一个很奇怪的问题。
我需要从 SQL Server(2016 版)读取数据。像O'Neal
这样的名字。
当我在 IDE/TextEditor 中加载字符串时,O'Neal
可以正确读取为O'Neal
。
但是当我将程序打包为 jar 或 war 文件时,O'Neal
会像这样 O��Neal
加载。
我不知道这是怎么发生的。任何建议将不胜感激。谢谢。
【问题讨论】:
加载是什么意思?您是否尝试在某处打印该值?如果实际文本使用 UTF-8 编码,请确保在显示文本时使用相同的编码。 @ShashankKadne 抱歉缺少信息。是的,我在控制台中打印它们。实际上,我不确定编码,我检查了SELECT SERVERPROPERTY('Collation')
,它返回 SQL_Latin1_General_CP1_CI_AS
【参考方案1】:
参考this question
就像@Arvind 所说,它在 IDE/Editor 中可以正常运行,因为它已经被编码为 UTF-8。
但是,jar 或 tomcat 不是,因此我们必须确保它以 UTF-8 编码运行。
-
在 Windows 10 CMD 中,jar 文件可以这样运行:
> java -Dfile.encoding="UTF-8" -jar test.jar
但是这个命令无法在 PowerShell 中运行,我不知道为什么这是另一个问题。
-
如果你想在tomcat服务器上运行war文件,在
pathToTomcat/bin
,用编辑器打开catalina.bat
。
添加set "JAVA_OPTS=%JAVA_OPTS% -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"
【讨论】:
以上是关于从 SQL Server 读取 nvarchar 时带菱形的问号的主要内容,如果未能解决你的问题,请参考以下文章
Linq - 从 SQL Server 中的 nvarchar 类型列中查找最大值
Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?
SQL Server:从包含json字符串的nvarchar(max)变量中获取所有字符串出现(标记)
SQL Server 算术溢出错误 - 将 nvarchar 转换为 datetime
NVARCHAR 存储 SQL Server 上 UCS-2 编码不支持的字符
Spring JDBC for SQL Server - 使用 SQLXML 数据类型产生 SQLServerException:不允许从数据类型 xml 到 nvarchar(max) 的隐式转换