【问题标题】:Doctrine ignores the charset and collation of the databaaeDoctrine 忽略了数据库的字符集和排序规则
【发布时间】:2018-01-14 13:37:18
【问题描述】:

当我执行命令doctrine:schema:update --dump-sql 时,我得到下面的 SQL 查询来创建一个表。它使用utf8 字符集和utf8_unicode_ci 排序规则。

CREATE TABLE an_example
(id INT AUTO_INCREMENT NOT NULL, 
 id_user INT NOT NULL, 
 date DATETIME NOT NULL, 
 PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;

但是,数据库设置为latin1latin1_swedish_ci。请参阅下面的查询结果,其中显示了数据库的字符集和排序规则。

mysql> SELECT * FROM information_schema.SCHEMATA  WHERE schema_name = "mydb";
+--------------+-------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+-------------+----------------------------+------------------------+----------+
| def          | mydb        | latin1                     | latin1_swedish_ci      | NULL     |
+--------------+-------------+----------------------------+------------------------+----------+

我确实在config.yml中设置了字符集和排序规则:

doctrine:
    dbal:
        driver: pdo_mysql
        host: '%database_host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        charset: latin1
        default_table_options:
            collate: "latin1_swedish_ci"

我还删除了缓存以防万一。

【问题讨论】:

    标签: mysql doctrine-orm collation charset


    【解决方案1】:

    数据库设置仅是默认值,用于在未指定字符集/排序规则的情况下创建表。

    表设置仅是默认值,用于在未指定字符集/排序规则的情况下创建列。

    我建议您不要担心数据库 (SCHEMATA),而要担心表及其列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多