Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1238258
  • 博文数量: 252
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2808
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(252)

文章存档

2019年(3)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: 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 ‘=’,后来找到

下面这个http://www.jb51.net/article/28023.htm

 数据库是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但是我们在终端cmdmysql>下看到的是正确的中文...

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_clientcharacter_set_database等仍然为UTF8


mysql这个字符集真是搞晕了,看书也不是看得很懂.晕晕晕

...,mysql5.1版本的odbc驱动又不支持set names操作,而且根据这个站点里面的方法进行改动

http://blog.csdn.net/6rl/article/details/1967274

我使用的delphi 7dbexpress又不能像它那样支持ServerCharSet=gb2312参数

好吧,delphi7latin1字符集的,把数据库字符集建成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、新建数据库,在新的数据库中操作

设置好了后:

cmdmysql>show variables like ‘character%’

Delphi中查询数据库 show variables:


和之前我们通过修改my.ini之后的都一样.没有变化.

让我们插入和查询试一下看:

一、1Delphi程序中:插入数据到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版本的

阅读(8194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册