使用RoR 2.3.8。
我有两个型号。奇怪的是,当我输入文本并保存在模型A中时,它会显示确切的文本,但是当我在模型B中执行此操作时,它会显示???
。它最有可能支持UTF-8,但另一个则不支持。问题是,我不记得我在其中任何一个。我该怎么做才能解决这个问题?
使用Mac OS 10.6.7,Chrome
答案 0 :(得分:0)
MySQL和其他数据库引擎在几个级别上设置用于文本的编码:服务器,数据库,表和列。通常,默认值从上到下,从服务器到数据库,从数据库到表等应用,但它们可以根据需要在任何给定点进行自定义。有时这种情况会在无意中发生,并可能导致问题。
了解目前哪种编码处于活动状态的一种方法是使用像Sequel Pro这样的客户端,它会向您公开此信息,或使用mysql
命令行工具进行调查:
SHOW CREATE DATABASE example;
您收到的回复中包含以下内容:
CREATE DATABASE `example` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */
在这种情况下,它是具有UTF-8 UNICODE排序规则的UTF-8表。编码定义了数据的存储方式,并且排序规则定义了如何处理排序和大小写转换。
进一步调查,您可以检查表格和列:
SHOW CREATE TABLE example;
这提供了更多细节,如下所示:
CREATE TABLE `example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `index_example_on_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
在这种情况下,表本身默认为UTF-8,同样标记了电子邮件列。您可能有一个不同的列。
如果您需要更改编码或排序规则,可以使用ALTER TABLE
语句来实现此目的。