0

当我执行命令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"

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

4

1 回答 1

2

数据库设置仅在您创建表时没有指定字符集/排序规则时的默认设置。

当您创建列而不指定字符集/排序规则时,表设置只是默认值。

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

于 2017-08-15T21:49:54.360 回答