zjk7837 发表于 2009-10-14 21:12:13

?VF+MYSQL的问题,大侠解决!!!

我用VF编辑的程序,用MYSQL做服务器,连接没问题,
MYSQL字符集除了服务器为UTF8 其余都为GB2312.
MH_DB数据库中TABLE1表中有‘图号’列记录有‘12345678901234567890’;‘123456789012345’;‘1234567890123456’三个记录
    当SQLEXEC(CON,"SELECT * FROM TABLE1 WHERE 图号=‘12345678901234567890’")   &&CON为连接语句句柄,此查询可以执行,没问题(TABLE1表中已有记录‘12345678901234567890’),可以查询到。但当使用?CTH变量代替时出现以下问题
CTH='12345678901234567890'
SQLEXEC(CON,"SELECT * FROM TABLE WHERE 图号= ?CTH")   && 查询为空,当CTH为15个字节时可以查询到,即
                                                                                          &&只有当CTH=‘123456789012345’可以查询到
此为问题一;
当执行SQLExec(con,"insert into kmh_k select * from kmh where 零件图号=?Cth")时有时可以执行,有时出现UTF8 与GB2312冲突,但这一句的前一句刚执行了一句SQLExec(con,“SET NAMES GB2312”),可是在程序调试状态下当出现冲突提示时,在命令行执行一下SQLExec(con,“SET NAMES GB2312”),再执行SQLExec(con,"insert into kmh_k select * from kmh where 零件图号=?Cth")就好了,
此问题二;
MYSQL数据有中文时如“一二三”,我使用VARCHAR,字段必须为“一二三   ”才能在VF中正确读出,即一个中文字符,后面必须加一个空格,如果后面有2个空格,在VF中显示“一二?”一个空格VF显示“一?”
此问题三。
我想是字符集的问题吧,一直未解决,请求那位大侠解决一下。

kider 发表于 2009-10-14 23:06:45

问题一: ?只代表一个匹配, 还有应该用like代替=
问题二:字段字符集和数据库、客户端、连接的字符集在操作时应该保持一致先,而set name就起这个作用,你可以在建立连接时就执行一下这句话。
问题三:字段字符集设置的问题

其他搜索一下论坛帖子...

zjk7837 发表于 2009-11-15 21:23:13

谢谢了,我试试看,
问题二:我建立连接和查询时都执行这句话,可有时就是冲突,
问题三:我查看了MYSQL的字符集设置,除了MYSQL服务器级的是UTF8,其余都是GB2312,
      我明天再试一下,将出问题的截图发上来。
再次表示感谢

zjk7837 发表于 2009-11-15 21:25:57

还有“?号代表一个匹配”是什么意思啊,应该用什么字符啊

zjk7837 发表于 2009-11-15 21:50:10

非常感谢Kider大哥,将我的问题置顶。在这里提一点小建议。
来这的大都是新手(来这的新手应该是挺幸运的,有这么多热心的大哥),有好多问题是相同的,你们可以总结一下让后贴一些源程序,简单的。那一目了然。如
VF+MYSQL,VC+MYSQL,VB+MYSQL,PHP+MYSQL等,从安装设置到源码,可以让我们照着做啊。
我明天把我的程序简化一下,传上去,看看能做成一个VF+MYSQL得例子吧。

kider 发表于 2009-11-17 11:42:15

谢谢你的良好建议,设置了此栏目的具体分类,在发表新帖时使用,方便查找...

zjk7837 发表于 2009-11-17 21:00:27

Kider大哥,问题一;已解决是VF里——工具---选项---数据里排序序列的设置问题,设为‘machine’问题解决。原来默认的是‘pinyin’选项。
问题二,不是大问题,我可以在程序里解决。
现在就剩下问题三。
我今天装了三次MYSQL ,
字符集安装时分别设置为UTF8,gbk,gb2312,
问题都存在,在VF远程视图存在中文显示不全问题,
在三种状态下都在命令窗口执行
SQLEXEC(CON,"SET NAMES GBK")&&&CON为连接句柄,已连上;
SQLEXEC(CON,"select * from table")&&&显示中文为乱码
SQLEXEC(CON,"SET NAMES GB2312")&&&CON为连接句柄,已连上;
SQLEXEC(CON,"select * from table")&&&显示中文为乱码
SQLEXEC(CON,"SET NAMES utf8")&&&CON为连接句柄,已连上;
SQLEXEC(CON,"select * from table")&&&显示中文取不全
好像是MYSQL里UFT8将中文做为一个字节,在服务器上取数据时少取了字段中文个数的字节,导致后面的数据显示不出来,将MYSQL里的数据设为VARCHAR,中文数据后面加上足够空字节,读取数据时就没问题了,但这好像是权宜之计。为什么微软的SQL不存在这问题呢。
好像MYSQL字符集问题是提问最多的吧。
另外VF数据为GBK
页: [1]
查看完整版本: ?VF+MYSQL的问题,大侠解决!!!