分类: WINDOWS
2012-06-10 20:47:27
连接是这样的 (delphi)应用程序--------ODBC--------mysql数据库
mysql数据库字符集是gb2312的,ODBC驱动是5.1版本的
DELPHI 7 连接mysql时的错误:gb2312_.......IMPLICTI) and latin1_swedist_ci,COERCIBLE..for operation ‘=’,后来找到
下面这个
数据库是gb2312数据集的的.在Delph程序中使用这样的语句select * from t where c=’中文’ 可以看到结果了说明ODBC发送给msyql数据库的是gb2312了,可是查询结果返回的中文却是问号??。而且不能用设置参数的形式
一、参数形式
procedure TForm1.Button1Click(Sender: TObject);
begin
SimpleDataSet1.DataSet.CommandText:='select * from t where c=:c ';
SimpleDataSet1.DataSet.ParamByName('c').AsString:='中国';
DBGrid1.DataSource:=DataSource1;
SimpleDataSet1.Active:=true;
SimpleDataSet1.Refresh;
end;
有个错误码
只能这样用非参数形式的
二、非参数形式
procedure TForm1.Button1Click(Sender: TObject);
begin
SimpleDataSet1.DataSet.CommandText:='select * from t where c=''中国'' '; //注意,中国两都全部者是单引号
DBGrid1.DataSource:=DataSource1;
SimpleDataSet1.Active:=true;
SimpleDataSet1.Refresh;
end;
好吧,现在把数据库的字符字段全用alter命令换成latin1字符集的.
好现在让我们插入在cm插入一条数据:insert into t values(‘中文’),.虽然用navicat打开它看到的是乱码,1但是我们在终端cmd的mysql>下看到的是正确的中文...
在Delphi中用select * from t查询也还是乱码没办法,(个人猜测:即然cmd终端里面的是中文了,那就是ODBC和数据库之间的字符集交换是gb2312的,但odbc传给delphi的却不是gb2312的字符)
,最终是要在DELphi 下面用.再改.
把mysql安装目录下的my.ini配置文件修改字符集
[client]
default-character-set=latin1
port=3306
[mysql]
default-character-set=latin1
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin1
在cmd下执行mysql>show variables like ‘character%’
但是我在Delphi程序中 执行查询show variables时,看到DBGrid中的数据,character_set_client和character_set_database等仍然为UTF8
对mysql这个字符集真是搞晕了,看书也不是看得很懂.晕晕晕
...,mysql的5.1版本的odbc驱动又不支持set names操作,而且根据这个站点里面的方法进行改动
http://blog.csdn.net/6rl/article/details/1967274
我使用的delphi 7的dbexpress又不能像它那样支持ServerCharSet=gb2312参数
好吧,那delphi7是latin1字符集的,把数据库字符集建成latin1的试试,
1、 把数据库安装目录下的my.ini文件中的字符集设置都改成latin1的
[mysql]
default-character-set=latin1
。。
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin1
如果有其它地方类似的字符集设置也改一下
2、 重启电脑或重启mysql服务
3、新建数据库,在新的数据库中操作
设置好了后:
cmd下mysql>show variables like ‘character%’
Delphi中查询数据库 show variables:
和之前我们通过修改my.ini之后的都一样.没有变化.
让我们插入和查询试一下看:
一、1在Delphi程序中:插入数据到mysql,用的命令不是参数形式的
在终端和Delhpi下查到的都是乱码(就不贴出来了)
2、在Delphi程序中:插入数据到mysql用的命令是参数形式的
procedure TForm1.Button5Click(Sender: TObject);
begin
try
SQLQuery1.Active:=false;
SQLQuery1.SQL.CommaText:='insert into t values (:t) ';
SQLQuery1.ParamByName('t').AsString:='中国';
SQLQuery1.ExecSQL(false);
Except
MessageBox(0,'操作数据库错误','',MB_OK);
end;
end;
查询按钮的也是用参数查询的:
procedure TForm1.Button1Click(Sender: TObject);
begin
SimpleDataSet1.DataSet.CommandText:='select * from t where c=:c ';
SimpleDataSet1.DataSet.ParamByName('c').AsString:='中国';
DBGrid1.DataSource:=DataSource1;
SimpleDataSet1.Active:=true;
SimpleDataSet1.Refresh;
end;
好了,这个问题解决了,其它就都没有什么了,因为自己这个主要就是Delphi应用程序用,还都是用参数形式的较多。这里面读写都可以就OK了。
意外发现终端下面的是中文
弄了这么久,就是从 非参数sql的中文 可以用,变成 参数sql语句 的中文可用了。不知道其它的应该怎么弄。而且在navicat中也是乱码。
但是只要在Delphi中都没乱码就可以了。算是搞定了吧
所以,总结几种解决方法:
一种:用latin1安装mysql就是解决问题的关键
二种:换delphi版本
三种:换驱动版本3.X版本的