使用ZeosLib构件连接MySQL4.1及以上版本的数据库,使用双字节字符集 |
|
yinjiajun
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2005-02-02 發送簡訊給我 |
yckuo大哥在 http://delphi.ktop.com.tw/board.php?cid=168&fid=918&tid=58356 提到使用ZeosLib系统构件组来访问MySQL数据库
,其中有详细的步骤介绍以及多个图表,是个相当完美的ZeosLib的教程。 小弟在这里对yckuo大哥的大作作一下补充(各位的砖头不要扔过来了^.^) 前言: yckuo大哥已经在他的大作中提到了如何下载、安装、使用ZeosLib构件,讲解的相当精辟,因此小弟在这里就不再介绍如何 安装构件等。 MySQL是一个快速发展的开源数据库项目,现在稳定版本已经发展到了MySQL4.1.12,而添加了视图、触发器、存储过程等新功能 的MySQL5.0也己经到了Beta09了,但是现在的开发工具大多都还停留在对MySQL4.0完整功能的支持,有的甚至直接不能连 接MySQL4.1及以上的服务器(如DBExpress)。而对程序员来讲,功能更为强大的MySQL4.1系统的服务器是更好的选择,它能提供 4.0所不能提供的 以下特性: (1).子查询 (2).多字符集 而这两个功能又是相当实用的,默认情况下Zeoslib构件(最新的6.5.1Alpha)就可以使用子查询了,但是字符集,默认情况下 ,MySQL4.1服务器支持的字符集是latin1,而在台湾、香港、澳门使用的是big5编码,而大陆使用的是gb2313(或gbk,注意, 在MySQL4.1中没有gb2312这个编码,只有gbk),为了在数据库中存储本地化的数据,肯定不能使用默认的latin1编码。 如何解决,请看下文:) 一.安装MySQL4.1服务器,网络上有好多关于安装MySQL的文章,我在这里就不再赘述了二.安装ZeosLib构件,请按照yckuo大哥的 方法来安装三.在服务器上创建测试数据库和测试数据表,建议使用command lines终端mysql.exe来登录和创建数据库, 如下: 我安装完MySQL4.1的服务器后,打开cmd.exe,进入到MySQL的bin目录如下: C:\MySQL4.1\Bin>mysql.exe 就可以登录到服务器 了(因为MySQL有一个默认的只能本地登录的root帐户,因此,可以直接使用mysql.exe不加任何参数就登录本地服务器)出现台下提 示符: mysql> 我们可以在这个控制台上执行所有MySQL服务器允许的命令,如show tables;show databases;以及一些DDL及 DML的SQL语句,这里我们创建一个测试数据库TEST1,字符集使用big5,命令如下: mysql>CREATE DATABASE `TEST1` DEFAULT CHARACTER SET big5 COLLATE big5_chinese_ci; 然后创建一个测试用的表,如下: mysql>CREATE TABLE t_test( mysql>t_testID integer not null primary key, mysql>F_Code integer not null default 0, mysql>F_Name varchar(32) not null default '', mysql>F_Note text mysql>); 然后就可以在客户端使用BCB或Delphi来开发了。 (四).客户端使用BCB/Deolphi Zeoslib来开发应用安装Zeoslib和使用它开发之前保证你的MySQL的libmysql.dll已经拷贝到 %System32%目录。新建立一个工程,在窗体上放以下构件: ZConnection: Protocol = "mysql"; Port = 3306; HostName = "localhost"; User = "abcd"; //你建立的可以登录的且有权限的用户 Password = "mypassword"; //你建立的用户的密码 Database = "test1"; 再在窗体上放置一个ZQuery,名称为tmpZQuery, 设置它的Connection为ZConnection, 然后在ZConnection的 AfterConnection中添加以下事件: tmpZQuery->Close(); tmpZQuery->SQL->Clear(); tmpZQuery->SQL->Add("SET NAMES big5"); tmpZQuery->ExecSQL(); 然后你就可以按照yckuo大哥提到的方法来开发以数据库应用了,否则在你的数据库应用中无法使用多字节的字符(只会看到乱码) 或是无法使用本地语言的排序功能。 后记:本文仅提供一个思路来在客户端使用多字节的字符(如gbk,big5,utf8等,要使用什么字符集,就在建立数据库的时候使用这 个字符集和排序作为默认字符集,在客户端访问的时候,先执行一次set names xxx来指定客户端与服务器通信采用的字符集就可 以了),对MySQL有一定基础的兄弟可能一下子不能明白,基础还有点欠缺的兄弟也可以在以下提出疑问。 小弟才疏学浅,定有纰漏之处,请各位达人指点。 |
a6475
高階會員 ![]() ![]() ![]() ![]() 發表:67 回覆:230 積分:154 註冊:2002-09-15 發送簡訊給我 |
其實我在用ZeosLib+set names 時會有一些問題
像我的server是設UTF8
Client是設原本的latin1
在union時會有一些轉換的問題
像
SELECT A FROM DB
UNION
SELECT 'T1' FROM DB2
mysql即會跳出無法轉換的問題
後來又把它強制轉換編碼,雖然可以正常的執行
但中文字卻會產生亂碼 SELECT A FROM DB
UNION
SELECT _UTF8'中文字' FROM DB2 後來實在沒辦法,後來還是放棄了。 ..-----------βλμε------------..
◎Oo月夜 光明 藍更愁oO◎ 藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475
------
月夜 光明 藍更愁 |
yinjiajun
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2005-02-02 發送簡訊給我 |
|
johnnyyang66
一般會員 ![]() ![]() 發表:0 回覆:1 積分:0 註冊:2004-06-23 發送簡訊給我 |
CREATE DATABASE `TEST1` DEFAULT CHARACTER SET big5 COLLATE big5_chinese_ci; 不用這麼麻煩....
我已試成功囉!!!
改成..... CREATE DATABASE `TEST1` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 也可以在建TABLE時加上 DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; 這樣就不用在考慮轉碼的問題囉!!!
也不用在下SQL COMMAND 前加一段...SHOW NAMES big5 囉
自己所編輯的網頁程式...也不用轉成UTF8的格式...直接COPY過去即可..
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |