線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3576
推到 Plurk!
推到 Facebook!

使用ZeosLib构件连接MySQL4.1及以上版本的数据库,使用双字节字符集

 
yinjiajun
一般會員


發表:4
回覆:14
積分:3
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-22 10:45:21 IP:211.162.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-31 10:46:12 IP:61.229.xxx.xxx 未訂閱
其實我在用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-31 20:22:42 IP:218.94.xxx.xxx 未訂閱
似乎Borland C Builder6/Delphi7对Unicode解决的不好, 我也曾经试过服务器和客户端都使用utf-8编码,好象是有问题, 但是我测试过,使用GBK/BIG5编码都没有问题。
johnnyyang66
一般會員


發表:0
回覆:1
積分:0
註冊:2004-06-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-11 17:58:39 IP:61.222.xxx.xxx 未訂閱
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過去即可..
系統時間:2024-07-01 19:53:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!