Ami*_*mit 25 symfony doctrine-orm
我正在使用Sytrfony2的Doctrine.我的config.yml文件看起来像这样: -
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
Run Code Online (Sandbox Code Playgroud)
不幸的是我的表没有整理到我试过的UTF8_general_ci或UTF8_unicode_ci
collate: utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)
但是Doctrine2并不承认这个选择.
我怎样才能实现同样的目标?
小智 25
整理的行为在学说中发生了变化:http://www.doctrine-project.org/jira/browse/DDC-2139
如果您未在表级别指定任何内容,则排序规则现在设置为utf8_unicode_ci.现在的方法是将它添加到表声明中的选项:
/**
* @ORM\Table(options={"collate"="utf8_swedish_ci"})
* @ORM\Entity
*/
Run Code Online (Sandbox Code Playgroud)
这将为表生成正确的排序规则:
$ php app/console doctrine:schema:update --dump-sql --env=test | grep swedish
... DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
我已经提交了一个问题,要更新文档以反映此行为.
Nan*_*com 17
该charset: UTF8选项对于让Doctrine SET NAMES UTF-8在每个页面上执行非常有用.我没有Doctrine的任何特定配置,我的表默认在utf8_general_ci InnoDB中.阅读文档的这一部分:http://www.doctrine-project.org/docs/orm/2.1/en/reference/faq.html#how-do-i-set-the-charset-and-collation-for -mysql-tables,它回答你的问题:
您无法在注释,yml或xml映射文件中设置这些值.要使数据库使用默认的字符集和排序规则,您应该将MySQL配置为使用默认字符集,或者使用字符集和排序规则详细信息创建数据库.这样,它们就会继承到所有新创建的数据库表和列.
小智 12
我建议您尝试将此设置添加到您的Doctrine配置中:
options:
1002: "SET NAMES 'UTF8' COLLATE 'utf8_unicode_ci'"
Run Code Online (Sandbox Code Playgroud)
所以它看起来像这样:
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
options:
1002: "SET NAMES 'UTF8' COLLATE 'utf8_unicode_ci'"
Run Code Online (Sandbox Code Playgroud)
作为参考Doctrine配置:http: //symfony.com/doc/2.0/reference/configuration/doctrine.html#reference-dbal-configuration
如果您使用的是MySql:http: //dev.mysql.com/doc/refman/5.0/en/charset-connection.html
BTW.我在显示波兰字符时遇到了问题,并且只添加了没有整理的设置名称(如下所示).
options:
1002: "SET NAMES 'UTF8'
Run Code Online (Sandbox Code Playgroud)
Dev*_*vWL 11
更新:
请参阅Symfony3.1书籍以供参考(单击此处):
另请注意使用utf8mb4而不是普通的utf8.("Symfony建议utf8mb4对抗MySQL的utf8字符集,因为它不支持4字节的unicode字符,并且包含它们的字符串将被截断.这由较新的utf8mb4字符集修复.")
设置MySQL的UTF8默认值就像在配置文件中添加几行一样简单(通常是my.cnf):
[mysqld]
# Version 5.5.3 introduced "utf8mb4", which is recommended
collation-server = utf8mb4_general_ci # Replaces utf8_general_ci
character-set-server = utf8mb4 # Replaces utf8
Run Code Online (Sandbox Code Playgroud)
您还可以更改Doctrine的默认值,以便生成的SQL使用正确的字符集.
# app/config/config.yml
doctrine:
dbal:
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
Run Code Online (Sandbox Code Playgroud)
使用下面的代码设置排序规则,引擎和字符集(注释示例):
/**
* @ORM\Table(
* name="temporary",
* options={"collate":"utf8_general_ci", "charset":"utf8", "engine":"MyISAM"}
* )
* @ORM\Entity
*/
Run Code Online (Sandbox Code Playgroud)
资料来源:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#annref-column
| 归档时间: |
|
| 查看次数: |
43109 次 |
| 最近记录: |