以老挝语从 SQL Server 2014 导出数据 [编码/排序问题]

Posted

技术标签:

【中文标题】以老挝语从 SQL Server 2014 导出数据 [编码/排序问题]【英文标题】:Exporting data from SQL Server 2014 in Lao Language [Encoding/Collation issue] 【发布时间】:2016-12-14 23:48:21 【问题描述】:

我获得了一个在老挝使用的数据库的非常大的备份 (.BAK),我在 SQL Server 2014 Express(本地)服务器上进行了还原。这是一个有很多列的数据库,其中包含老挝文本。当使用数据库的人通过客户端应用程序(某种泰国会计程序)访问它时,当他们将显示字体设置为 Saysettha(一种带有老挝字符的 Unicode 字体)时,他们可以看到所有老挝数据都正确显示。

但是,我正在尝试从 SSMS 导出表中的数据(通过简单的文本或 csv 文件,因为导出过程需要简单且可重复)并且数据永远不会正确显示。即使我在 SSMS 中进行表查询也不行。

我知道这可能是编码/整理的问题。这些列存储在VARCHAR 列中。我尝试将它们转换为NVARCHAR 列,但这并不能解决问题。我还尝试将列排序为Lao排序规则(恢复备份后服务器排序规则设置为Thai_CI_AS);

SSMS trial

我尝试将输出表保存为具有不同编码的 CSV 和 TXT 文件,但是当我在例如Notepad++ 我看到了同样的错误字符。

很遗憾,由于客户端软件没有在我的笔记本电脑上运行,因此我没有文本应该是什么样子的示例。

理想情况下,我能够以 UTF-8 编码导出列。

【问题讨论】:

【参考方案1】:

我的理解是老挝文字一般以UTF-8编码、UTF-16编码或者Code page 1133编码存储。

当查看应用程序使用与存储数据时相同的编码时,它看起来没问题。 不幸的是,有时查看应用程序并没有确切地知道使用了什么编码,所以它“有帮助地”尝试guess,有时它猜错了。 通常,错误的猜测对于观看显示器的人来说是显而易见的——这些字母甚至不是来自正确的语言。

更糟糕的是,当您告诉应用程序从数据库中导出数据,而不是简单地导出文本的原始字节时,应用程序可能会“有帮助地”将数据转换为不同的编码。 如果应用程序恰好知道数据库中数据的实际编码,那么在导出时转换为 UTF-16 或 UTF-8 效果很好;否则导出的数据通常会损坏且无法使用。

有时最难解决的问题是系统实际运行正常的问题,但我(错误地)认为存在问题。有时发生这种情况是因为我用来查看问题的工具存在缺陷。 如果您在 Notepad++ 中看到的大部分是老挝字符,或者您可以更改 Notepad++ 中的编码直到您看到大部分是老挝字符,那么我怀疑您的文本或 csv 文件中的数据以及 Notepad++ guessed 或您使用 @987654324 设置的编码@ 可能是正确的。

有什么方法可以让您查看数据是否真正被数据库正确存储、处理、导出等,并被客户端应用程序正确显示,但记事本或 SSMS 中的呈现故障是否不正确弄乱一些重音符号?

"Data Formats for Bulk Import or Bulk Export (SQL Server)" 似乎建议使用字符格式(“-c”)将数据导出到文本文件,就像您正在做的那样,即使是 Unicode 数据,而不是原生格式(“-n”),Unicode 原生格式(“-N ") 或 Unicode 字符格式 ("-w")。 How to Export utf-8 data from sql server 2008 to excel Export query result to csv in UTF-8 "SQL Server: Export table data to UTF-8 text file" "How to import/export mysql database with exact character set" Export import of asian languages data in sql server "Microsoft Drivers for php for SQL Server: How to: Send and Retrieve UTF-8 Data Using Built-In UTF-8 Support" “对于 Unicode 数据,排序规则与物理存储无关。” --UTF-8 Support, SQL Server 2012 and the UTF8String UDT

【讨论】:

这是我需要的帮助。我已经能够通过批量导出导出数据,我使用了字符格式(“-c”)并明确提到了包含代码页 1133 的 Microsoft 代码页 874(通过添加“-C 874”)。虽然在 ASCII 中,我可以读取导出的 CSV/TXT 文件。现在可以导出到 UTF-8。

以上是关于以老挝语从 SQL Server 2014 导出数据 [编码/排序问题]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL SERVER 导出/导入数据库

将数据从 MS Sql Server 存储过程导出到 excel 文件

SQL Server 2005 - 以编程方式导出表(运行 .sql 文件来重建它)

SQL Server 2014如何导出数据库

Sqoop 导出到 Sql Server VS 批量插入到 SQL Server

使用c#将表从Sql Server导出到PDF文件