两个型号,一个显示重音字符,另一个显示?

时间:2011-04-26 15:25:54

标签: ruby-on-rails unicode

使用RoR 2.3.8。

我有两个型号。奇怪的是,当我输入文本并保存在模型A中时,它会显示确切的文本,但是当我在模型B中执行此操作时,它会显示???。它最有可能支持UTF-8,但另一个则不支持。问题是,我不记得我在其中任何一个。我该怎么做才能解决这个问题?

使用Mac OS 10.6.7,Chrome

1 个答案:

答案 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语句来实现此目的。