PHP Doctrine - 设置应用程序范围的默认表charset的最佳实践

时间:2010-09-23 05:50:56

标签: php doctrine

目前,我正在设置我的表格字符集和整理,如下所示:

class Model extends Doctrine_Record
{

  public function setTableDefinition()
  {
    //...

    $this->option('collate', 'utf8_unicode_ci');
    $this->option('charset', 'utf8');
  }

}

我在所有的表定义中都设置了它。有没有办法设置默认值? 在我的bootstrap中,我正在设置其他默认值:

Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    array('name' => 'id', 'type' => 'integer', 'length' => 4));

如果有办法为collat​​e和charset做同样的事情会很好。 我找到了它的常数,但找不到它们在某处使用过的地方。

由于

2 个答案:

答案 0 :(得分:3)

Doctrine_Manager::connection('mysql://user:pass@host/schema')
    // This must be the charset of your HTTP header 
    // header('Content-Type: text/html;charset=utf-8');
    // or your HTML Head tag
    // <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ->setCharset('UTF8')
    ;

这就是你所需要的(即使使用latin1表,例如,重点e也会正确保存)。

但说实话,最好在整个系统(DB,HTML)中使用相同的字符集,因为您可以丢失一些数据(例如,您网站上输入的中文字符不会保存在您的latin1表中)< / p>

答案 1 :(得分:2)

最好不要在学说中将其定义为默认值,因为它需要与多种数据库类型(Mysql,MSSql,SQLite,...)兼容。但是我会给你一些选择,你可以如何在没有教条和教条的情况下做到这一点:

选项1:

我主要在my.cf文件中设置整个数据库服务器的默认值。 此文件位于Debian(Ubuntu)上的/etc/mysql/my.cnf中(如果您使用其他操作系统,则可能会有所不同)。

[mysqld]
default-character-set = utf8
default-character-collate = utf8_unicode_ci

编辑完文件后重启mysql服务器。这应该可以解决问题。

选项2: 创建数据库时:

CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

您也可以更改数据库:

ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

选项3: 如果你想改变一个表:

ALTER TABLE `tablename` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

选项4: 你可以这样做:

public function configureDoctrine(Doctrine_Manager $manager)
{
    $manager->setCollate('utf8_unicode_ci');
    $manager->setCharset('utf8');
}