【发布时间】:2012-05-20 01:27:16
【问题描述】:
目前,我正在将我们所有的 Delphi 2007 代码库更新到 Delphi XE2。最大的考虑是 ANSI 到 Unicode 的转换,我们通过将所有基本类型(char/string)重新定义为 ANSI 类型(ansichar/ansistring)来处理这个问题。在我开始使用数据库之前,这在我们的许多程序中都有效。
当我将从文件读取的信息存储到 SQL Server 2008 数据库中的程序转换时,问题就开始了。使用字符串定位数据的简单查询突然会失败,例如:
SELECT id FROM table WHERE name = 'something'
name 字段是varchar。我发现我可以通过在字符串名称前加上N 来成功完成查询。我的印象是varchar 只能 存储 ANSI 字符,但它似乎在存储 Unicode?p>
更多信息:Delphi 中的名称字段是string[13],但我尝试删除[13]。数据库排序规则为SQL_Latin1_General_CP1_CI_AS。我们使用 ADO 与数据库交互。连接信息存储在 ODBC 管理器中。
注意:由于 Panagiotis 的一些指导,我已经解决了我的实际问题。我们从地图文件中读取的名称是array[1..24] of AnsiChar。该值被隐式转换为string[13],其中包括空字符。所以一个 5 个字符的名字实际上是作为 5 个字符 + 8 个空字符存储在数据库中的。
【问题讨论】:
标签: sql-server sql-server-2008 delphi unicode ansi