默认情况下,系统(Windows)中并没有默认提供DBX连接MySQL(包括其它多种数据库)的厂商驱动程序。放一个TSQLConnection控件到窗体上,它的Driver属性提供了一个下拉列表,从其中选择MySQL,IDE会自动填充其它驱动属性,点开Params属性的“…”按钮可以查看详细信息。其中VendorLib=LIBMYSQL.dll,这个LIBMYSQL.dll就是我们需要提供的厂商驱动程序。实际上这应该是MySQL提供的,如果安装了WAMP,在[WAMP安装目录]binmysqlmysql5.5.16lib目录下就有一个,不过版本并不一定匹配。

        需要成功连接MySQL,首先就要解决这个厂商驱动程序问题。我测试的环境是,Delphi XE2 + WampServer2.2(MySQL5.5.16),直接使用Wamp目录下的libmysql.dll,出现这样的提示:
请输入图片描述

        搜索了一下,找到一个5.1.59版本的libmysql.dll,下载地址:http://wiltonsoftware.com/download/libmysql-5.1.59-win32.zip。将其复制到Delphi XE2安装目录(如:X:Program FilesEmbarcaderoRAD Studio9.0bin)。需要注意的是,复制到这里,仅仅是保证了在IDE里设计和运行时可以成功连接MySQL,而编译出来的程序单独运行时,仍然会有上面的提示,因为程序未能找到厂商驱动程序,最好是将其复制到%systemroot%system32目录下。

        成功连接MySQL之后,需要显示数据库中的数据,可能还会发现,表中的中文字符串显示成乱码(或问号)了。必须正确设置MySQL的字符集,但使用utf8以外的字符集时,程序会出现内存错误,不知道什么原因(-_-!)。所以要从源头开始使用utf8,包括数据库、表和字段,都指定utf8字符集,然后在TSQLConnection参数里将指定ServerCharSet指定为utf8才行。

        我测试了来自phpMyAdmin、Delphi写的应用程序、MySQL CommandLine及PHP页面,4种方式插入的中文字符串,均能正确显示。具体请看后面的代码。

创建数据库及表(SQL):


CREATE DATABASE test DEFAULT CHARSET utf8;

CREATE TABLE IF NOT EXISTS dbx (
id INT(11) NOT NULL AUTO_INCREMENT,