【发布时间】:2010-04-24 17:08:13
【问题描述】:
我有整理 latin1_general_ci 的表格并有土耳其字符值。我可以在delphi 7+zeos上毫无问题地使用这些数据。但我想将我的 delphi 升级到 2010 版本,但我看到 zeos 太慢了。所以我想使用 odbc+ado 或 dbexpress 解决方案。
dbexpress 解决方案工作正常,按输入的方式显示我的数据并按输入的表格写入,而不对列字符集进行任何更改。但正如我所见,dbexpress 有问题。例如,当我从列类型为 varchar、decimal、int、tinyint、text 的表中选择 * 时,会在 xp 系统上给出 av 错误。 vista 和 7 没有给出任何错误并且工作正常(未完全测试)。
在 xp 系统访问冲突跟踪是 访问冲突调试跟踪是
|7C9010E0|ntdll.dll | | |RtlLeaveCriticalSection | |
|7E419239|USER32.dll | | |CharUpperBuffW | |
|7E419216|USER32.dll | | |CharUpperBuffW | |
|7C80CED0|kernel32.dll| | |LCMapStringW | |
|7C910380|ntdll.dll | | |RtlImageNtHeader | |
|7C903247|ntdll.dll | | |RtlConvertUlongToLargeInteger| |
|7C90E485|ntdll.dll | | |KiUserApcDispatcher | |
|009A631E|Project1.exe|Unit1.pas |TForm1|Button1单击 |110[37]|
ado 解决方案(dbgo)工作正常,但它不显示我输入的数据。它希望一切都是 utf。但我不想在测试所有内容之前将我的数据转换为 utf。如何查看输入的数据并写入客户端 utf 并存储 latin1(就像 zeos 或 dbexpress 一样)。
我尝试了许多其他选项。例如。 mysql 端排序规则和字符集参数。
抱歉我的英语不好。我希望有人能理解我。
谢谢。
【问题讨论】:
-
我不了解您的情况,但您是否尝试过使用
SET NAMES设置 connection 的字符集?此外,您应该描述您收到的错误消息。 -
是的,试过了。但我的数据是 latin1 格式的。它包括土耳其语字符。没有转换集名称不能完全工作。如果您使用集合名称,则无法搜索土耳其语字符。在 utf 中你可以做到。但没有完整测试我不想将我的数据转换为 utf
-
在 dbexpress 解决方案中,我遇到了访问冲突。我试过做跟踪错误。这是因为数字转换错误。我有十进制(20,8)之类的列,双无符号。我的主键列是双无符号非空 auto_increment。我将在我的 xp 系统中发布调试跟踪。
-
啊,所以你也需要写回数据。那么,对字符问题进行排序的最简单方法是将表迁移到 UTF-8,不是吗?那不可能吗?至于我不知道的第二个问题,那似乎源于数字转换。我记得 Delphi 的数据库连接器中存在此类问题,但我使用的最后一个版本是 Delphi 5 :)
-
是的,你说得对。连接器也很难。 odbc 也将我的主键视为 id=1.00000。这将是未来的问题。无论如何,我希望我必须通过读取 latin1 和 utf8decode 并将我的所有数据转换为 utf-8 并再次写入 utf8 表。据我了解,alter table 不能解决我的问题。谢谢。
标签: mysql delphi utf-8 ado dbexpress