加入收藏 | 设为首页 | 会员中心 | 我要投稿 4S站长网 (https://www.4s3.cn/)- 科技、混合云存储、数据迁移、云上网络、数据计算!
当前位置: 首页 > 数据库 > MySql > 正文

mysql C ActiveRecord在Ruby 1.9.2-rc1下以ASCII-8Bit返回数据

发布时间:2023-12-14 17:05:40 所属栏目:MySql 来源:DaWei
导读: 除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit.我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告!
该项目使

除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit.我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告!

该项目使用以下技术:

> Padrino框架
> Ruby 1.9.2-rc2(同样是1.9.1和1.9.2-preview3)
> ActiveRecord
> MySQL

(完整名单)

$bundle show | ack '(record|padrino)' * activerecord (2.3.8) * padrino (0.9.14) * padrino-admin (0.9.14) * padrino-core (0.9.14) * padrino-gen (0.9.14) * padrino-helpers (0.9.14) * padrino-mailer (0.9.14)

剧集表:

mysql> DESCRIBE `episodes`; +----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | show_id | int(11) | YES | | NULL | | | season_id | int(11) | YES | | NULL | | | episode_number | int(11) | YES | | NULL | | | title | varchar(255) | YES | | NULL | | | year | int(11) | YES | | NULL | | +----------------+--------------+------+-----+---------+----------------+ 6 rows in set (0.02 sec) mysql> SHOW CREATE TABLE episodes; Table: episodes Create Table: CREATE TABLE `episodes` ( `id` int(11) NOT NULL AUTO_INCREMENT,`show_id` int(11) DEFAULT NULL,`season_id` int(11) DEFAULT NULL,`episode_number` int(11) DEFAULT NULL,`title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,`year` int(11) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=74332 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci mysql> SHOW CREATE DATABASE development; +-------------+--------------------------------------------------------------------------------------------------------+ | Database | Create Database | +-------------+--------------------------------------------------------------------------------------------------------+ | development | CREATE DATABASE `development` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | +-------------+--------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

正如您所看到的,数据库肯定认为事情应该是UTF-8;和数据库适配器:

ActiveRecord::Base.configurations[:development] = { :adapter => 'mysql',:encoding => 'utf8',:reconnect => false,:database => "development",:pool => 5,:username => 'root',:password => '',:host => 'localhost',}

在检查活动记录连接时,在控制台中回显:

ruby-1.9.2-rc1 > ActiveRecord::Base.connection DEBUG - [06/Jul/2010 19:24:32] "SQL (0.1ms) SET NAMES 'utf8'" DEBUG - [06/Jul/2010 19:24:32] "SQL (0.1ms) SET SQL_AUTO_IS_NULL=0" => #

ruby-1.9.2-rc1>的ActiveRecord :: Base.connection.encoding

Ruby应该知道语言,这是我的$locale

LANG="en_GB.UTF-8" LC_COLLATE="en_GB.utf-8" LC_CTYPE="en_GB.utf-8" LC_MESSAGES="en_GB.utf-8" LC_MONETARY="en_GB.utf-8" LC_NUMERIC="en_GB.utf-8" LC_TIME="en_GB.utf-8" LC_ALL=

虽然Ruby没有设置Encoding.default_internal:

$irb --simple-prompt ruby-1.9.2-rc1 > Encoding.default_internal => nil

我在我的应用程序的config / boot.rb中添加了一个片段,如下所示:

if Kernel.const_defined?("Encoding") and Encoding.respond_to?(:find) and Encoding.respond_to?(:default_internal) Encoding.default_internal = Encoding.find('UTF-8') end

这完全符合您的预期……但是是黑客攻击,并没有解决问题.

这是现场问题的输出:

ruby-1.9.2-rc1 > e = Episode.new DEBUG - [06/Jul/2010 19:29:14] "SQL (0.1ms) SET NAMES 'utf8'" DEBUG - [06/Jul/2010 19:29:14] "SQL (0.1ms) SET SQL_AUTO_IS_NULL=0" DEBUG - [06/Jul/2010 19:29:14] "Episode Columns (0.8ms) SHOW FIELDS FROM `episodes`" => #

(编辑:4S站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章