DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 4
在线用户: 1
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/28 10:51:56
标题:
关于SQL语句中有汉字不能运行的问题 浏览:2362
加入我的收藏
楼主: 数据库采用MySQL5
用Delphi7编写的小程序
如下
    self.Query1.Close;
    self.Query1.SQL.Clear;
    s :='select * from gongxiang  where About="hello"  order by ID DESC';
    self.Query1.SQL.add(s);
    self.Query1.Open;
上面代码执行没有问题
但是包括汉字的时候如
    self.Query1.Close;
    self.Query1.SQL.Clear;
    s :='select * from gongxiang  where About="你好"  order by ID DESC';
    self.Query1.SQL.add(s);
    self.Query1.Open;
则出错
错误信息为
General SQL error
(utff_general_ci,Coercible) for operation '=''.Process stopped,Use Step or run to continue.
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/28 10:54:07
1楼: 语句应该没有问题
我把该语句复制到MySQL控制台里去执行,没有问题
----------------------------------------------
-
作者:
男 pythonqt ( ) ★☆☆☆☆ -
普通会员
2008/8/28 13:50:03
2楼: 改一下数据库的默认语言格式
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/28 14:59:10
3楼: alter table gongxiang CHARACTER SET=gb2312;
改变语言后,问题还是没有解决
----------------------------------------------
-
作者:
男 chuzx (ant) ★☆☆☆☆ -
盒子活跃会员
2008/8/28 15:16:14
4楼: 用传参的方式试试吧
parambyname('v_about').assstring:='你好';
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/28 15:51:46
5楼: 非常感谢chuzx
此方法可行,

但能否告诉我是什么原因吗?
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/28 16:01:22
6楼: 在三个论坛同时提问

盒子最快最好,
----------------------------------------------
-
作者:
男 tintin1943 (零输好) ★☆☆☆☆ -
盒子活跃会员
2008/8/28 20:20:27
7楼: Params方式传递参数,可避免一些非法字符或单引号。
----------------------------------------------
不喧哗 自有声 心静 思远 志行千里
作者:
男 tiny_bird (delphi_tokyo) ★☆☆☆☆ -
盒子活跃会员
2008/8/28 21:05:28
8楼: 把双引号换成两个单引号就可以了
----------------------------------------------
winsock api,通讯,多线程,VCL,Java
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/29 15:03:57
9楼: 把双引号换成单引号,我试验了,不可行
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/8/31 9:04:02
10楼: 我猜测很有可能是Delphi7不完全支持Unicode
----------------------------------------------
-
作者:
男 lsy810809 (lsyflash) ★☆☆☆☆ -
普通会员
2008/9/8 13:55:29
11楼: 引号前面加个N试试看
----------------------------------------------
-
作者:
男 zxm (认真学习) ★☆☆☆☆ -
盒子活跃会员
2008/9/8 23:14:57
12楼: 10楼的乱说,,,
我猜测很有可能是Delphi7不完全支持Unicode

是他自已的语句格式有问题...
应该用单引号...
----------------------------------------------
好好学习,天天向上!
→我: ●-(不许动!)  ● ←:你:
    █┳        ┗█┛
      ┏┓          ┛┗

按此在新窗口浏览图片
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 8:15:42
13楼: 在我的记忆中MySQL5对于字符串是非常宽松的,单引号和双引号都可以,
早上测试了一下,我的记忆是没有问题的,
----------------------------------------------
-
作者:
男 redasurc (redasurc) ★☆☆☆☆ -
普通会员
2008/9/9 8:34:24
14楼: 客户端程序连接数据库时set names 'GBK'

服务端MySQL配置库为utf8_general_ci

完全支持中文查询
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 8:35:37
14楼: 为了不误人,早上再试验了一下
procedure TForm1.Button1Click(Sender: TObject);
begin
   self.Query1.Close;
   self.Query1.SQL.Clear ;
   self.Query1.SQL.Add('select * from gongxiang where about like ''%目录%'';');
   self.Edit1.Text := 'select * from gongxiang where about like ''%目录%'';';
   self.Query1.Open;
end;
以上语句提示的错误与上面相同

WinXp+D7+MySQL5
别的数据库可不可行我不知道,我没有试验
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 8:37:41
15楼: 14楼的,我没有完全明白你的意思,
我的客户端和服务器暂时在一台机器上,

关于
客户端程序连接数据库时set names 'GBK'
应该怎么写?
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 8:40:27
16楼: 是不是D7的问题我还不肯定,D2009出来了,号称完全支持Unicode,到时候在试验一下相同的语句,就完全清楚了,
----------------------------------------------
-
作者:
男 dejoy (FireFox) ★☆☆☆☆ -
普通会员
2008/9/9 8:54:22
17楼: 说了半天,楼主还是没说关键是用的什么数据库引擎访问MYSQL5的?
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 14:26:09
18楼: WinXP+D7+BDE+MySQL5
虽然问题解决了,争辩越来越有意思了,能知道问题到底出在哪里
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 16:40:37
19楼: WinXP+D7+BDE+MyODBC5+MySQL5
虽然问题解决了,争辩越来越有意思了,能知道问题到底出在哪里
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/9 17:41:16
20楼: 你们有没有发现有两个14楼,哈哈
----------------------------------------------
-
作者:
男 redasurc (redasurc) ★☆☆☆☆ -
普通会员
2008/9/9 20:01:48
21楼: liuzemin:

    问题出在字符集上
服务器设置:MySQL 字符集: UTF-8 Unicode (utf8) 
          MySQL 连接校对 UTF8_general_ci

C/S
客户端查询时先query("SET NAMES 'GBK'")
然后你再query('select * from gongxiang  where About="你好"  order by ID DESC')

B/S
客户端查询时先query("SET NAMES 'UTF8'")
然后你再query('select * from gongxiang  where About="你好"  order by ID DESC')


数据库引擎无关,测试服务器是不是本机无关
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/10 8:15:23
22楼: 呵呵,MyODBC5不支持SET NAMES 'GBK'
还是非常感谢你热心的回复
----------------------------------------------
-
作者:
男 azsd (曾半仙) ★☆☆☆☆ -
盒子活跃会员
2008/9/10 9:23:42
23楼: 用键盘1左边的"诡异单引号"扩`GBK`试试看.
----------------------------------------------
-
作者:
男 redasurc (redasurc) ★☆☆☆☆ -
普通会员
2008/9/10 10:57:04
24楼: 配置myodbc时,第二标签项有一个character设置,里面填GBK

delphi没试过,不过ACCESS连接成功,可正常管理mysql

mysql-connector-odbc-3.51.26-win32.msi
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/12 8:50:59
25楼: 经过测试
WinXP+D7+zeosDBO+MyODBC5+MySQL5
完全能通过

因此可以肯定问题出在BDE
----------------------------------------------
-
作者:
男 yanghaijun (yanghaijun) ★☆☆☆☆ -
盒子活跃会员
2008/9/13 11:27:59
26楼: 这问题也未必是 BDE,我用 XP+D7+MySQL5+SQLDirect 好像也不能正确使用中文
----------------------------------------------
-
作者:
男 yanghaijun (yanghaijun) ★☆☆☆☆ -
盒子活跃会员
2008/9/13 11:28:19
27楼: 估计还是 Delphi 的 Unicode 支持问题
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/18 8:01:19
28楼: WinXP+D2009+BDE+MyODBC5+MySQL5
问题依旧,
----------------------------------------------
-
作者:
男 yuxuanstudio (雨轩工作室) ★☆☆☆☆ -
普通会员
2008/9/18 12:01:55
29楼: 到底是什么原因呢???
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/18 15:52:29
30楼: 如果D2009真的像codegear说的那样完全支持Unicode,则BDE的嫌疑很大,
以上纯属个人观点
----------------------------------------------
-
作者:
男 liuzemin (liuzemin) ★☆☆☆☆ -
普通会员
2008/9/18 15:56:08
31楼: 再反复看了一下所有的回复,认为21楼的观点比较可信
21楼:
问题出在字符集上
服务器设置:MySQL 字符集: UTF-8 Unicode (utf8) 
          MySQL 连接校对 UTF8_general_ci

C/S
客户端查询时先query("SET NAMES 'GBK'")
然后你再query('select * from gongxiang  where About="你好"  order by ID DESC')

B/S
客户端查询时先query("SET NAMES 'UTF8'")
然后你再query('select * from gongxiang  where About="你好"  order by ID DESC')


数据库引擎无关,测试服务器是不是本机无关
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS