我在老挝使用的数据库有非常大的备份(.BAK),我在SQL Server 2014 Express(本地)服务器上还原了该数据库。这是一个数据库,其中有许多列,其中包含老挝文本。当使用数据库的人通过客户端应用程序(某种泰国会计程序)访问它时,将显示字体设置为Saysettha(这是带有老挝字符的Unicode字体)时,他们可以看到正确显示的所有老挝数据。
但是,我试图从SSMS导出表中的数据(通过简单的文本或csv文件,因为导出过程需要简单且可重复),并且数据从未正确显示。甚至当我在SSMS中执行表查询时也没有。
我知道这可能是编码/排序规则的问题。列存储在VARCHAR
列中。我尝试过将它们转换为NVARCHAR
列,但这并不能解决问题。我还尝试将列归类为老挝归类(还原备份后,服务器归类设置为Thai_CI_AS);
我试图将输出表另存为具有不同编码的CSV和TXT文件,但是当我在记事本++中打开它们时,我看到了相同的错误字符。
不幸的是,由于没有在我的笔记本电脑上运行客户端软件,因此我没有文本的外观示例。
理想情况下,我将能够以UTF-8编码导出列。
我的理解是,老挝文本通常以UTF-8编码,UTF-16编码或代码页1133编码存储。
当查看应用程序使用与存储数据时相同的编码时,它看起来不错。不幸的是,有时未告知查看应用程序确切使用了哪种编码,因此它“有帮助”地尝试猜测,有时却猜错了。通常,对于看显示器的人来说,错误的猜测是显而易见的-字母甚至不是来自正确的语言。
更糟糕的是,当您告诉应用程序从数据库中导出数据,而不是简单地导出文本的原始字节时,该应用程序可能会“有帮助地”将数据转换为不同的编码。如果应用程序碰巧知道数据库中数据的实际编码,则在导出时转换为UTF-16或UTF-8效果很好;否则,导出的数据通常会被破坏并且无法使用。
有时,最难解决的问题是那些系统实际运行正常的问题,但是我(错误地)认为存在问题。有时由于我用来查看问题的工具中的缺陷而发生这种情况。如果您在Notepad ++中看到的大多数是老挝字符,或者您可以更改Notepad ++的编码,直到您看到主要是老挝的字符,那么我怀疑您的文本或csv文件中的数据以及Notepad ++猜测或通过Encoding-> Encode设置的编码可能是正确的。
有什么方法可以让您查看数据库是否确实在正确地存储,处理,导出数据,以及客户端应用程序是否正确显示了数据,但是记事本或SSMS中的渲染故障不正确地处理了一些重音符号分数?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句