用ruby写mysql,如果直接操作字节流

用ruby写mysql出现编码问题。mysql用的是默认编码latin1,但是ruby需要写入utf-8的字符串。目前问题在于,不允许改变mysql数据库的编码。(高手应... 用ruby写mysql出现编码问题。mysql用的是默认编码latin1,但是ruby需要写入utf-8的字符串。目前问题在于,不允许改变mysql数据库的编码。(高手应该知道latin1覆盖了00-ff,所以理论上讲所有字符都是可以写得进去的。)
之前用java是通过直接写字节流的方式,不进行编码检查,直接写进数据库,但是ruby必须要走mysql的驱动吗?有没有办法直接操作字符流?我不关心数据库里的结果是不是乱码,我只关心我怎么写进去,怎么读出来。

简单而言,不转码,写数据库。
展开
 我来答
Mymillet
2012-06-14
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
直接写入数据库就好了,写一个读写mysql的类文件接口,然后调用操作。具体如下,我调试过的。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
require 'mysql'
class MysqlDb
# attr_accessor :host, :user, :pass, :database
def open(host=nil, user=nil, pass=nil, database=nil,port=3306)
@host =host
@user = user
@pass = pass
@database = database
@port = port
begin
@connection = Mysql.new(@host, @user, @pass, @database, @port)
rescue
puts "connect faild! an error has occurred: #{$!}" # 错误信息保存在特殊变量$!中。
try_again
end
end

def try_again
puts '------------------try again, if not modify, leave a blank---------------'
print "host: "
host=STDIN.gets.strip
@host = check_value(host,@host)
puts "---------------current host: #{@host}"
print "user: "
user =STDIN.gets.strip
@user = check_value(user,@user)
puts "---------------current user: #{@user}"
print "password: "
pass =STDIN.gets.strip
@pass = check_value(pass,@pass)
puts "---------------current password: #{@pass}"
print "database: "
database =STDIN.gets.strip
@database = check_value(database,@database)
puts "---------------current database: #{@database}"
print "port: "
port =STDIN.gets.strip
@port = check_value(port,@port)
open(@host, @user, @pass, @database, @port)
puts "---------------current port: #{@port}"
end
def check_value(value,returnvalue)
if value == ""
nil
else
returnvalue = value
end
return returnvalue
end

def iquery(sql)
field = []
@connection.query(sql).each do |data|
field << data
end
field.to_a
end
def iexecute(sql)
@connection.query(sql)
end
def close
@connection.close
end

end

# useages
adb = MysqlDb.new
adb.open('127.0.0.1','root','zyq001122','hello_z','3307')
# result = db.query "insert into user value(7,\"lilY\",\"256y42\",\"#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}\" )" # 插入记录
# result.each {|row| puts row}
num_of_records = adb.iquery ('select count(*) from user') #查询
puts num_of_records
#sql = "insert into user value(10,\"Hello-Kitty\",\"256y42\",\"#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}\" )" # 数据操作
# sql = 'update user set name=\'jackjhons\' where uid=5 ' # 更新一条记录
#adb.iexecute(sql)
# adb.close
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式