首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails应用程序中使用latin1编码

在rails应用程序中使用latin1编码
EN

Stack Overflow用户
提问于 2013-07-02 23:34:41
回答 2查看 2.3K关注 0票数 1

我正在尝试使用以下database.yml将我的rails应用程序设置为使用latin1编码

代码语言:javascript
复制
development:
adapter: postgresql
database: pana_development
pool: 5
timeout: 5000
encoding: latin1

运行rake db:create时,我得到以下错误:

代码语言:javascript
复制
Couldn't create database for {"adapter"=>"postgresql", "database"=>"pana_development",    "pool"=>5, "timeout"=>5000, "encoding"=>"latin1"}
PG::Error: ERROR:  encoding LATIN1 does not match locale en_US.UTF-8
DETAIL:  The chosen LC_CTYPE setting requires encoding UTF8.

我需要做什么才能在postgresql数据库中设置使用latin1编码的rails?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-02 23:44:41

首先,您需要提供程序版本。

接下来,您需要了解默认区域设置LC_CTYPE是在集群创建时确定的。I quote the manual here

创建数据库时,某些区域设置类别的值必须是固定的。您可以对不同的数据库使用不同的设置,但是一旦创建了数据库,就不能再为该数据库更改这些设置。LC_COLLATELC_CTYPE就是这些类别。它们会影响索引的排序顺序,因此必须保持固定,否则文本列上的索引可能会损坏。(但您可以使用排序规则来减轻此限制,如第22.2节所述。)这些类别的默认值是在运行initdb时确定的,除非在CREATE DATABASE命令中另有指定,否则在创建新数据库时将使用这些值。

使用在template0模板数据库上构建的CREATE DATABASE可以很容易地解决这个问题,因为模板数据库中没有预先确定的对象。

代码语言:javascript
复制
CREATE DATABASE pana_development ENCODING 'LATIN1' TEMPLATE template0;

在Ruby中,你可以只提供一个"template“参数:

代码语言:javascript
复制
template: template0

比较一下这个密切相关的答案:

rake db:create encoding error with postgresql

为了重复使用,你应该准备一个如上所述的数据库,把你想要的所有东西都放到未来的数据库中,并使用这个作为模板。任何数据库都可以用作模板。

或者您使用匹配的LC_TYPE创建一个新的数据库集群,并从那里获取它。

票数 1
EN

Stack Overflow用户

发布于 2014-04-08 17:09:19

我在Gist中找到了一个脚本,它的效果非常好

代码语言:javascript
复制
sudo su postgres

psql

update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'
  lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;

update pg_database set datistemplate=true where datname='template1';

您可以获取原始源here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17429732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档