JS脚本通过ADO连接MySQL

我一向都习惯用JS脚本作为常用的工具性语言,比如写一些导入导出程序,管理程序等等。数据库这块大部分用的都是SQL Server,ADO连接是最常用的了,从来也没发生过什么问题,呵呵。

今天想弄一些数据到本机的MySQL数据库里面,大概有几万条吧,还是用脚本吧,反正自己早已经写了一些脚本库并注册为组件了,直接用就行。不过脚本库里面的数据库连接这块缺省用的是SQL Server,要连MySQL还得改改,上网查了查,很容易就找到了方案。

1、安装MySQL ODBC Driver,这个网上比较多,随便找一个安装下载了便是,我用的是3.51 版本。安装完毕以后管理工具》ODBC数据源》驱动程序里面会多一个驱动:MySQL ODBC 3.51 Driver

2、ADO连接字符串:

MySQL的是:

sql = "driver={MySQL ODBC 3.51 Driver};server=" + this.server + ";port=3306;option=131072;stmt=;database=" + this.db + ";uid=" + this.user + ";pwd=" + this.passwd;

SQL Server的是:

sql = "driver={sql server};server=" + this.server + ";database=" + this.db + ";uid=" + this.user + ";pwd=" + this.passwd;

于是ADO连接就这么搞定了,其它程序由于都是用标准的ADO方式,所以不用做任何改动就可以用了,^_^

不爽的是:原以为只有在做JAVA程序开发的时候才有中文问题,没想到在Windows下用JS+MySQL这个可恶的中文问题也折磨的我够呛:(

无论是INSERT/UPDATE/SELECT一旦碰到中文字符都会出现异常或者乱码,后来将数据库字符集换成UTF-8试了试就可以插入了。不过由于我的MySQL Front以及其它数据库字符集缺省设置的是GB2312,因此就不能直接浏览数据库里面的中文了,当然也很不爽了。

仔细阅读了一下MySQL 5.x的中文手册的10.3.6连接字符集和校对一节,终于发现原因所在。有3个变量可以用来控制字符集:

[b] * character_set_client ,这是用户告诉MySQL查询是用的什么字符集。
* character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。
* character_set_results , MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。[/b]

于是在建立完SQL连接之后,即调用SQL语句:

[b]set character_set_client = gb2312
set character_set_connection = gb2312
set character_set_results = gb2312[/b]

设置如上三个变量,一切就迎刃而解了。此外,更简单的办法就是调用语句:
[b]
set NAMES gb2312[/b]

替代上面3句。

再回过头来看为什么MySQL配置问卷my.ini里面已经设置了参数default-character-set=gb2312了,还会出现这种情况呢?

可能是ADO调用MySQL ODBC 3.51 Driver驱动访问MySQL时缺省的字符集用的时UTF-8吧,而ADO对象又没有提供参数、方法或者连接字符串来更改缺省字符集,所以才有上面的情况出现。

反思一下:每个人在做JAVA、MySQL等程序时基本上都会碰到很多字符集、编码的问题,而做ASP/.NET、SQL Server开发时缺少有人碰到(通过google/baidu搜一下看结果数量就知道了),这是为什么呢?

可能是灵活性的代价必然就是复杂性吧……
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值