ASP 连接 mysql 5.0.18版本 的中文乱码的问题
刚接触mysql数据库几天,发现在asp获取数据后的中文变成了乱码 上网找资料 很少有ASP连接mysql数据库的,几经学习,搞定了,
一.数据库的字符集设置
首先在my.ini文件中的下列代码中修改默认的字符集设置 ,你也可以改为别的utf8等
......
[client]
port=3306
[mysql]
default-character-set=gbk
......
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
......
default-character-set=gbk
......
改好之后,我们再在MySQL控制台MySQL Command Line Client中连上数据库中
执行一下语句
mysql> show variables like '%char%';
执行的结果如下:
+--------------------------+-------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | D:/MySQL Server 5.0/share/charsets/ |
+--------------------------+-------------------------------------+
7 rows in set (0.28 sec)
以上的Value值除character_sets_dir和character_set_system 外如果不是我们要设置的gbk
则我们可以通过
mysql> set character_set_database = 'gbk';
进行修改为gbk;
character_set_system 的Value值是系统写死的 是utf8 , 不能进行更改,(一位高手讲的)
可以下载源代码 , 用VC.net 打开mysql.sln 工程 , 打开在mysqld工程中的mysqld.cpp,
找到这个函数, mysql_init_variables,里边有两句
system_charset_info= &my_charset_utf8_general_ci;
files_charset_info= &my_charset_utf8_general_ci;
封掉,改为
system_charset_info= &my_charset_gbk_chinese_ci;
files_charset_info= &my_charset_gbk_chinese_ci;
编译后在client_debug目录下生成mysqld-debug.exe ,改名mysqld-nt.exe 放到mysql/bin下就OK了
如果修改了character_set_system 的值,则表名也支持中文了,为utf8 时候表名不支持中的
当然了 做程序开发的表名和字段名命名为中文的也比较少的 (命名规则 ^_^)
这一切都设置好之后,下面就是驱动的设置了
二.MySQL的ODBC驱动设置
首先你要下载一个mysql的ODBC驱动
我是在官方网站www.mysql.com 上下载的mysql-connector-odbc-3.51.19-win32.
安装好之后,打开数据源(ODBC),在ODBC数据源管理器中添加刚才安装的mysql的ODBC数据驱动 MySQL ODBC 3.51 Driver 对应的项就不用介绍了 主要是填写的项如图就行了 ,
之后可是点击TEST按钮测试一下
驱动配置好之后,
三.Asp的连接配置
主要是连接字符串的设置
ConnectionString = "driver={mysql odbc 3.51 driver}; database=bb;server=192.168.140.253;
uid=root;password=kjlink;Option=3;Stmt=Set Names 'GBK'"
Set Conn = Server.CreateObject("ADODB.Connection")
可以用一下的代码进行测试:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>无标题文档</title>
</head>
<body>
<%
StrConn = "driver={mysql odbc 3.51 driver}; database=bb;server=192.168.100.100;
uid=root;password=sa;Option=3;Stmt=Set Names 'GBK'"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open StrConn
%>
<%
set rs_modules = Server.createobject("ADODB.Recordset")
sql = "insert into user values (1,' 显示中文汉字了^_^ ')"
rs_modules.CursorType=3
rs_modules.CursorLocation=3
rs_modules.Open sql,Conn
sql1 = "Select ID, name from user"
rs_modules.CursorType=3
rs_modules.CursorLocation=3
rs_modules.Open sql1,Conn
while not rs_modules.eof
Response.Write rs_modules("name" )
rs_modules.movenext
wend
rs_modules.close
set rs_modules=nothing
%>
</body>
</html>
注释:此测试示例是向192.168.100.100主机的bb数据库的user表中添加一条记录,然后在读出来。