PHP原则-设置应用程序范围的默认表字符集的最佳实践

PHP原则-设置应用程序范围的默认表字符集的最佳实践,php,doctrine,Php,Doctrine,目前,我正在如下设置我的表字符集和排序规则: class Model extends Doctrine_Record { public function setTableDefinition() { //... $this->option('collate', 'utf8_unicode_ci'); $this->option('charset', 'utf8'); } } Doctrine_Manager::getInstance()-&

目前,我正在如下设置我的表字符集和排序规则:

class Model extends Doctrine_Record
{

  public function setTableDefinition()
  {
    //...

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

}
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    array('name' => 'id', 'type' => 'integer', 'length' => 4));
public function configureDoctrine(Doctrine_Manager $manager)
{
    $manager->setCollate('utf8_unicode_ci');
    $manager->setCharset('utf8');
}
我在我所有的表定义中都设置了这个。有没有办法设置默认值? 在我的引导中,我设置了其他默认值,如下所示:

class Model extends Doctrine_Record
{

  public function setTableDefinition()
  {
    //...

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

}
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    array('name' => 'id', 'type' => 'integer', 'length' => 4));
public function configureDoctrine(Doctrine_Manager $manager)
{
    $manager->setCollate('utf8_unicode_ci');
    $manager->setCharset('utf8');
}
如果有一种方法可以对collate和charset执行同样的操作,那就太好了。 我找到了它的常量,但找不到它们是否曾在某处使用过


谢谢

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

选项1:

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

编辑文件后,重新启动mysql服务器。这应该能奏效

选项2: 创建数据库时:

CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
您还可以更改数据库:

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: 您可以这样做:

class Model extends Doctrine_Record
{

  public function setTableDefinition()
  {
    //...

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

}
Doctrine_Manager::getInstance()->setAttribute(
    Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    array('name' => 'id', 'type' => 'integer', 'length' => 4));
public function configureDoctrine(Doctrine_Manager $manager)
{
    $manager->setCollate('utf8_unicode_ci');
    $manager->setCharset('utf8');
}
条令管理器::连接('mysql://user:pass@主机/架构')
//这必须是HTTP头的字符集
//标题('Content-Type:text/html;charset=utf-8');
//或者你的HTML头标签
// 
->setCharset('UTF8')
;
这就是您所需要的(即使使用拉丁1表,例如重音e也会正确保存)


但老实说,最好在整个系统中使用相同的字符集(DB、HTML),因为您可能会丢失一些数据(例如,在您的网站上输入的中文字符不会保存在您的拉丁文表中)

您好,谢谢您的回答,您能说得更具体一点吗?我的cf去哪里了?它叫什么名字?我没有那个文件;)对不起,现在我明白了。非常感谢。不幸的是,对于托管的web服务器,这可能不是一个选项,所以我希望看到条令的方式。我再次更新了我的答案。你不能像我在回答中说的那样在教义中这样做。但是我给出了更多的选项来解决你的问题。>正如我所知,没有办法设定默认原则。事实上,有。再次阅读我的第一篇文章。您可以设置每个表的默认字符集/排序。您还可以为其他基于表的选项指定默认值,因此对于charset/collate肯定也有一种方法可以做到这一点。也许你误解了我的问题?我怎样才能改进这个问题使它更清晰?我的意思是我不知道如何为整个数据库设置它。但我发现了一个新的选项,它被添加到我的帖子中。在2.1条原则中,我怎么能做到这一点?