表迁移到 SQL Server 后,Access 无法筛选 Unicode 字符

Posted

技术标签:

【中文标题】表迁移到 SQL Server 后,Access 无法筛选 Unicode 字符【英文标题】:Access cannot filter on Unicode characters after tables migrated to SQL Server 【发布时间】:2014-09-23 18:35:21 【问题描述】:

我已使用他们的工具将 MS Access 2010 数据移至 SQL,现在按 Unicode 过滤在 Access 链接表中不起作用。我看到 SQL 中的链接表列是“nvarchar”,但在 Access 中有“Unicode 压缩”设置为“否”,我无法更改它。

【问题讨论】:

【参考方案1】:

据我了解,“Unicode 压缩”设置仅影响本机 Access (ACE/Jet) 表,对 ODBC 链接表没有影响。相反,您可能需要做的是使用 SQL Server Management Studio 更改 SQL Server 数据库本身的“排序规则”设置:

例如,使用上述 SQL Server 排序规则设置(“SQL_Latin1_General_CP1_CI_AS”),我无法从 Access 过滤希腊字符(例如,“γιορτή”),但如果我将 SQL Server 数据库的排序规则更改为“Greek_CI_AS”,那么相同的访问过滤器将起作用。

编辑回复:cmets

虽然此解决方案适用于 SQL Server 原生支持的单字节代码页(例如,希腊语,对应于 Windows-1253),但它不适用于缺少这些代码页且必须是由

表示
    SQL Server 不支持的代码页,或 Unicode。

Access 中的 ODBC 链接表显然不完全支持 Unicode,将搜索字符串作为 'text' 而不是 N'text' 传递给 SQL Server,因此 SQL Server 感觉必须根据所选的单字节代码解释任何此类文本页面(通过“排序规则”)设置。

【讨论】:

对于亚美尼亚语没有特殊的排序规则。在 SQL 搜索中工作正常 =N'sometext'。但是当我在链接表中使用 MS Access 搜索时,无法使用 =N'....',它会转换为 ='...' 并且不显示结果。 @戈德 @Gord,它不能解决链接 ODBC 的 Microsoft 访问问题。 Microsoft Access 可以正确显示和添加 unicode 文本,但不会对包含 unicode 字符的记录应用过滤器。 @Madnik7G 正如我在回答中所说,当我尝试使用希腊字符时,它对我有用。您尝试使用什么语言?正如arman 之前的评论中所指出的,像亚美尼亚语这样的一些语言没有原生的SQL Server 对排序规则的支持。 SQL Server 可以存储和检索 Unicode 字符,但如果排序顺序不完全匹配,则排序和搜索可能会出现问题。 @Gord,我尝试了波斯语,其文本包含唯一的 unicode 字符 YE“ی”。看起来问题是由 ODBC 驱动程序或访问而不是 SQL 服务器引起的。成功存储和检索数据,但如果您只是执行简单查询(不是传递查询)或过滤具有该 Unicode 字符的列,那么您不会得到任何结果。即使您右键单击 Microsoft Access 列并选择 EQUAL 菜单,如果该列包含“ی”,您将看到没有结果。 @Madnik7G 够公平的。我在其他地方看到过关于 ODBC 链接表的类似 cmets。我已经更新了我的答案,试图更好地解释为什么会发生这种情况。

以上是关于表迁移到 SQL Server 后,Access 无法筛选 Unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章

将 Access 交叉表查询转换为 SQL Server

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?

前端为access,后端为sql server

从 Access 迁移到 SQL Server 数据库

查询在具有本地表的原始数据库中运行,但在表迁移到 SQL Server 时不运行 - 错误:“定义的字段过多”

需要在 MS Access 中使用链接表更改 sql server 数据库名称