EasyASP - 简单好用的ASP类库框架

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1405|回复: 10

[v3 Bug反馈] Mysql使用{username}查询出错,提示Invalid utf8 character string

[复制链接]

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
发表于 2015-7-30 09:36:44 | 显示全部楼层 |阅读模式

[ASP,VB,VBS] 纯文本查看 复制代码
'Easp.Var("username") = Easp.Get("username")
'Easp.Var("username") = Easp.Post("username")
Easp.Var("username") = Easp.Var("username")
语句1: Set rs = Easp.Db.Sel("select * from 操作员 where 用户名='"&Easp.Var("username")&"' order by userid desc")
语句2: Set rs = Easp.Db.Sel("select * from 操作员 where 用户名={username} order by userid desc")


语句1 能够成功查询;
语句2 报错误, 是不是替换的时候出现了不符合UTF-8的代码?
错误代码:-2147467259; 错误描述:[MySQL][ODBC 5.3(w) Driver][mysqld-5.5.5-10.0.20-MariaDB]Invalid utf8 character string: 'B2E2CA'; 错误来源:Microsoft OLE DB Provider for ODBC Drivers)

MySQL ODBC驱动采用32位的: Driver={MySQL ODBC 5.3 Unicode Driver}MySQL My.INI
[mysqld]
datadir=D:/MariaDB/data
port=3306
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
innodb_buffer_pool_size=1015M
innodb_log_file_size=50M
character-set-server=utf8
[client]
port=3306

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-7-30 09:40:05 | 显示全部楼层
{username}值是英文, 没有报错;

{username}值是中文, 则报错误.
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-7-30 15:47:26 | 显示全部楼层
[ASP,VB,VBS] 纯文本查看 复制代码
418      .ActiveConnection = conn
419     ' .CommandText = sql 
419     ' .CommandText = outSql
420      .CommandType = 1
421      .Prepared = True


将easp.db.asp的419行 的 sql 改为 outSql 就可以, 但是不知道会不会出现其他问题.

暂时这样处理先.
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 14:55:11 | 显示全部楼层
还是有问题, 于是调试了一下; 把easp.db.asp 的419行恢复之后;
在534行插入个断点 Easp.Println .CommandText

发现打印出来的是
select * from 操作员 where 用户名=?
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 15:00:07 | 显示全部楼层
我找到问题行了; 在easp.db.asp 的414行
[ASP,VB,VBS] 纯文本查看 复制代码
sql = Easp.Str.Replace(sql, "\{(.+?)\}", "?")

经过这行处理后, sql变量的值由
select * from 操作员 where 用户名={uname}

变成了
select * from 操作员 where 用户名=?

回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 15:11:16 | 显示全部楼层
然而uname=test时候还是可以正确执行查询

看来不是414行的问题. 不好意思.
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 17:23:09 | 显示全部楼层
原来?是参数化查询, 误解了.
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 23:36:35 | 显示全部楼层
找到问题所在了, 我安装了 mysql 5.3的驱动
后来改 Easp3 默认的5.1驱动就可以了。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-4 23:50:52 | 显示全部楼层
新问题更新数据时候, 中文数据乱码了。。。 明天在研究了
回复 支持 反对

使用道具 举报

2

主题

11

帖子

50

积分

炼气期

Rank: 2

积分
50
 楼主| 发表于 2015-8-5 08:58:52 | 显示全部楼层
ConnStr 那里加上 Stmt=set names utf8 或者Stmt=set names gbk 更新数据都是乱码;
后来查看show variables like 'character%';
MariaDB [(none)]> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | gbk                        |
| character_set_connection | gbk                        |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | gbk                        |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | D:\MariaDB\share\charsets\ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

在ConnStr 加上CharSet=gbk; 解决.
不知道要不要把 character_set_connection 和  character_set_results等都改为了utf8;
因为在配置找不到, 暂时这样先.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Lengshi Lincase Inc. ( 蜀ICP备05022485号-5

GMT+8, 2017-6-25 18:19 , Processed in 1.165083 second(s), 25 queries .

Powered by coldstone with Discuz! X

© 2008-2017 EasyASP.cn

快速回复 返回顶部 返回列表