ruby mysql 乱码_Ruby on Rails 数据库连接及mysql乱码

这几天一直学Ruby on Rails 从中也有不少的问题,就尽量的去看书或是google,百度是百不出来了。

昨天一直做一个简单的测试就是list所有数据出来,可一直出问题,后来在网上看到了一个文章,做出来了。不过还会有点mysql乱码问题,下面看一下ROR数据库连接。

# SQLite version 3.x

#   gem install sqlite3-ruby (not necessary on OS X Leopard)

development:

adapter: mysql

encoding: utf8

database: titles

username: root

password:

host: localhost

timeout: 5000

# Warning: The database defined as 'test' will be erased and

# re-generated from your development database when you run 'rake'.

# Do not set this db to the same as development or production.

test:

adapter: mysql

encoding: utf8

database: titles

username: root

password:

host: localhost

timeout: 5000

production:

adapter: mysql

encoding: utf8

database: titles

username: root

password:

host: localhost

timeout: 5000

这里要注意的就是yml阐的冒号后一定要加个空格,不然后一直出错。我昨天做的就是这样的,一直出错。红色的是解决mysql的乱码问题,不过在建立mysql数据库时要注意那个整理那里要选对,应该选 “utf-8 general ci”,这样就不会出现中文乱码问题了。

下面是对整理的描述:字符集和整理

整理 描述

armscii8 (ARMSCII-8

Armenian)

armscii8_bin 亚美尼亚语, 二进制

armscii8_general_ci 亚美尼亚语, 不区分大小写

ascii (US ASCII)

ascii_bin 西欧 (多语言), 二进制

ascii_general_ci 西欧 (多语言),

不区分大小写

big5 (Big5 Traditional Chinese)

big5_bin 繁体中文, 二进制

big5_chinese_ci 繁体中文, 不区分大小写

binary (Binary pseudo charset)

binary

二进制

cp1250 (Windows Central European)

cp1250_bin 中欧 (多语言), 二进制

cp1250_croatian_ci 克罗地亚语, 不区分大小写

cp1250_czech_cs 捷克语, 区分大小写

cp1250_general_ci 中欧 (多语言), 不区分大小写

cp1251 (Windows

Cyrillic)

cp1251_bin 西里尔语 (多语言), 二进制

cp1251_bulgarian_ci 保加利亚语, 不区分大小写

cp1251_general_ci 西里尔语 (多语言), 不区分大小写

cp1251_general_cs 西里尔语 (多语言), 区分大小写

cp1251_ukrainian_ci 乌克兰语, 不区分大小写

cp1256 (Windows Arabic)

cp1256_bin

阿拉伯语, 二进制

cp1256_general_ci 阿拉伯语, 不区分大小写

cp1257 (Windows

Baltic)

cp1257_bin 巴拉克语 (多语言), 二进制

cp1257_general_ci 巴拉克语 (多语言), 不区分大小写

cp1257_lithuanian_ci 立陶宛语, 不区分大小写

cp850 (DOS West

European)

cp850_bin 西欧 (多语言), 二进制

cp850_general_ci 西欧 (多语言), 不区分大小写

cp852 (DOS Central European)

cp852_bin 中欧 (多语言), 二进制

cp852_general_ci 中欧 (多语言), 不区分大小写

cp866 (DOS Russian)

cp866_bin 俄语,

二进制

cp866_general_ci 俄语, 不区分大小写

cp932 (SJIS for Windows

Japanese)

cp932_bin 日语, 二进制

cp932_japanese_ci 日语, 不区分大小写

dec8 (DEC

West European)

dec8_bin 西欧 (多语言), 二进制

dec8_swedish_ci 瑞典语, 不区分大小写

eucjpms (UJIS for Windows Japanese)

eucjpms_bin 日语, 二进制

eucjpms_japanese_ci 日语, 不区分大小写

euckr (EUC-KR Korean)

euckr_bin 朝鲜语,

二进制

euckr_korean_ci 朝鲜语, 不区分大小写

gb2312 (GB2312 Simplified

Chinese)

gb2312_bin 简体中文, 二进制

gb2312_chinese_ci 简体中文, 不区分大小写

gbk

(GBK Simplified Chinese)

gbk_bin 简体中文, 二进制

gbk_chinese_ci 简体中文, 不区分大小写

geostd8 (GEOSTD8 Georgian)

geostd8_bin 乔治亚语, 二进制

geostd8_general_ci

乔治亚语, 不区分大小写

greek (ISO 8859-7 Greek)

greek_bin 希腊语, 二进制

greek_general_ci 希腊语, 不区分大小写

hebrew (ISO 8859-8 Hebrew)

hebrew_bin

希伯来语, 二进制

hebrew_general_ci 希伯来语, 不区分大小写

hp8 (HP West

European)

hp8_bin 西欧 (多语言), 二进制

hp8_english_ci 英语, 不区分大小写

keybcs2

(DOS Kamenicky Czech-Slovak)

keybcs2_bin 捷克斯洛伐克语, 二进制

keybcs2_general_ci 捷克斯洛伐克语, 不区分大小写

koi8r (KOI8-R Relcom

Russian)

koi8r_bin 俄语, 二进制

koi8r_general_ci 俄语, 不区分大小写

koi8u

(KOI8-U Ukrainian)

koi8u_bin 乌克兰语, 二进制

koi8u_general_ci 乌克兰语, 不区分大小写

latin1 (cp1252 West European)

latin1_bin 西欧 (多语言), 二进制

latin1_danish_ci 丹麦语, 不区分大小写

latin1_general_ci 西欧 (多语言), 不区分大小写

latin1_general_cs 西欧 (多语言), 区分大小写

latin1_german1_ci 德语 (字典), 不区分大小写

latin1_german2_ci 德语 (电话本), 不区分大小写

latin1_spanish_ci 西班牙语, 不区分大小写

latin1_swedish_ci 瑞典语, 不区分大小写

整理 描述

latin2 (ISO 8859-2 Central

European)

latin2_bin 中欧 (多语言), 二进制

latin2_croatian_ci 克罗地亚语, 不区分大小写

latin2_czech_cs 捷克语, 区分大小写

latin2_general_ci 中欧 (多语言), 不区分大小写

latin2_hungarian_ci 匈牙利语, 不区分大小写

latin5 (ISO 8859-9

Turkish)

latin5_bin 土耳其语, 二进制

latin5_turkish_ci 土耳其语, 不区分大小写

latin7

(ISO 8859-13 Baltic)

latin7_bin 巴拉克语 (多语言), 二进制

latin7_estonian_cs

爱沙尼亚语, 区分大小写

latin7_general_ci 巴拉克语 (多语言), 不区分大小写

latin7_general_cs 巴拉克语

(多语言), 区分大小写

macce (Mac Central European)

macce_bin 中欧 (多语言), 二进制

macce_general_ci 中欧 (多语言), 不区分大小写

macroman (Mac West

European)

macroman_bin 西欧 (多语言), 二进制

macroman_general_ci 西欧 (多语言),

不区分大小写

sjis (Shift-JIS Japanese)

sjis_bin 日语, 二进制

sjis_japanese_ci

日语, 不区分大小写

swe7 (7bit Swedish)

swe7_bin 瑞典语, 二进制

swe7_swedish_ci

瑞典语, 不区分大小写

tis620 (TIS620 Thai)

tis620_bin 泰语, 二进制

tis620_thai_ci

泰语, 不区分大小写

ucs2 (UCS-2 Unicode)

ucs2_bin Unicode (多语言), 二进制

ucs2_czech_ci 捷克语, 不区分大小写

ucs2_danish_ci 丹麦语, 不区分大小写

ucs2_esperanto_ci Esperanto, 不区分大小写

ucs2_estonian_ci 爱沙尼亚语, 不区分大小写

ucs2_general_ci Unicode (多语言), 不区分大小写

ucs2_hungarian_ci 匈牙利语, 不区分大小写

ucs2_icelandic_ci 冰岛语, 不区分大小写

ucs2_latvian_ci 拉脱维亚语, 不区分大小写

ucs2_lithuanian_ci 立陶宛语, 不区分大小写

ucs2_persian_ci 波斯语, 不区分大小写

ucs2_polish_ci 波兰语, 不区分大小写

ucs2_roman_ci 西欧, 不区分大小写

ucs2_romanian_ci

罗马尼亚语, 不区分大小写

ucs2_slovak_ci 斯洛伐克语, 不区分大小写

ucs2_slovenian_ci 斯洛文尼亚语,

不区分大小写

ucs2_spanish2_ci 传统西班牙语, 不区分大小写

ucs2_spanish_ci 西班牙语, 不区分大小写

ucs2_swedish_ci 瑞典语, 不区分大小写

ucs2_turkish_ci 土耳其语, 不区分大小写

ucs2_unicode_ci Unicode (多语言), 不区分大小写

ujis (EUC-JP

Japanese)

ujis_bin 日语, 二进制

ujis_japanese_ci 日语, 不区分大小写

utf8 (UTF-8

Unicode)

utf8_bin Unicode (多语言), 二进制

utf8_czech_ci 捷克语, 不区分大小写

utf8_danish_ci 丹麦语, 不区分大小写

utf8_esperanto_ci Esperanto, 不区分大小写

utf8_estonian_ci 爱沙尼亚语, 不区分大小写

utf8_general_ci Unicode (多语言), 不区分大小写

utf8_hungarian_ci 匈牙利语, 不区分大小写

utf8_icelandic_ci 冰岛语, 不区分大小写

utf8_latvian_ci 拉脱维亚语, 不区分大小写

utf8_lithuanian_ci 立陶宛语, 不区分大小写

utf8_persian_ci 波斯语, 不区分大小写

utf8_polish_ci 波兰语, 不区分大小写

utf8_roman_ci

西欧, 不区分大小写

utf8_romanian_ci 罗马尼亚语, 不区分大小写

utf8_slovak_ci 斯洛伐克语, 不区分大小写

utf8_slovenian_ci 斯洛文尼亚语, 不区分大小写

utf8_spanish2_ci 传统西班牙语, 不区分大小写

utf8_spanish_ci 西班牙语, 不区分大小写

utf8_swedish_ci 瑞典语, 不区分大小写

utf8_turkish_ci 土耳其语, 不区分大小写

utf8_unicode_ci Unicode (多语言), 不区分大小写

Open new phpMyAdmin window

其中这三个都是多语言

utf8_bin Unicode (多语言), 二进制

utf8_unicode_ci Unicode (多语言), 不区分大小写

utf8_general_ci Unicode (多语言),

不区分大小写

第一个是二进制的,据说二进制可以储存图片,我估计是桌面应用上用的,跟web没关系

后面两个的区别我查了下结果如下:

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

下面的例子是从网上找来的仅供参考,不过要注意我下面红色标出的地方,这就是ROR优点之出,约束优于配置。接下来创建一个能够显示数据库数据的页面。Rails是MVC模式的编程方式。

首先创建数据模型:app\models\title.rb

4f1150b881333f12a311ae9ef34da474.pngclassTitle<:base>

4f1150b881333f12a311ae9ef34da474.pngend数据库titles(小写复数),文件名title.rb(小写单数),类名Title(大写单数)

大写方式--单词第一个字母为大写。小写方式--每个单词用下划线分开。

模型类中不必定义属性,它会自动以数据库字段为属性。

set_table_name "table1" 定义对应的表

set_primary_key "name" 改默认的ID主键为name,不过以后name字段就用成id,如:o.id="chengang"

创建视图:views\homepage\index.rhtml,显示出title表所有记录的id和name值

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

ChenGang's Site

4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png__4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

视图中用到的@titles变量来自于我们自己创建的如下控制器: app\controllers\homepage_controller.rb。Rails中控制器中的变量可以在视图中使用(这是否会产生变量污染的问题呢,还待以后再体验)

4f1150b881333f12a311ae9ef34da474.pngclassHomepageController

4f1150b881333f12a311ae9ef34da474.png  def index

4f1150b881333f12a311ae9ef34da474.png    @titles=Title.find(:all)

4f1150b881333f12a311ae9ef34da474.png  end

4f1150b881333f12a311ae9ef34da474.pngend

4f1150b881333f12a311ae9ef34da474.png

还有就是在ASP.NET MVC 中不怎么好用多个model到view里,用是可以用的,我重建一个model将两个或多个放在一起,可是在ROR中就不一样了,他只要再做个一个实例变量来查询就OK了,直是Agile Development,ASP.NET MVC还得抄像一点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值