为什么我的 table 的编码错误?
Why is my table's encoding wrong?
我正在使用 Rails 5 和 MySQL 5.7。我的 database.yml 中有以下内容:
default: &default
adapter: mysql2
pool: 5
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_unicode_ci
socket: /tmp/mysql.sock
development:
<<: *default
database: [...]
username: [...]
password: [...]
我 运行 rake db:reset
重新创建我的数据库,我 运行 show create table users
我看到 CREATE TABLE
users([...]) ENGINE=InnoDB DEFAULT CHARSET=utf8
.
为什么我的 CHARSET=utf8
以及我该如何解决它(使其等于 utf8mb4
)?谢谢。
创建 table 时要明确:
CREATE TABLE users (
name VARCHAR(99) NOT NULL,
...
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4;
另一种技术是忽略 table 默认值,并在每一列上明确显示:
CREATE TABLE users (
name VARCHAR(99) CHARACTER SET utf8mb4 NOT NULL,
...
) ENGINE=InnoDB;
可能发生的事情是你在两个地方都没有指定字符集,但是数据库上的DEFAULT
是utf8 .
rake db:reset
是错误的。 rake db:drop && rake db:create && rake db:migrate
正确。
reset
刚刚从已存储的模式创建了表,该模式具有错误的字符集和排序规则。但是从迁移中重新创建它们会使用新的字符集和排序规则创建它们。
问题是 db:reset
调用 db:schema:load
。如果您的 db/schema.rb
文件有错误的编码值,它将加载错误的内容。您可以修复 db/schema.rb
以在 运行 db:reset
之前获得正确的编码
我正在使用 Rails 5 和 MySQL 5.7。我的 database.yml 中有以下内容:
default: &default
adapter: mysql2
pool: 5
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_unicode_ci
socket: /tmp/mysql.sock
development:
<<: *default
database: [...]
username: [...]
password: [...]
我 运行 rake db:reset
重新创建我的数据库,我 运行 show create table users
我看到 CREATE TABLE
users([...]) ENGINE=InnoDB DEFAULT CHARSET=utf8
.
为什么我的 CHARSET=utf8
以及我该如何解决它(使其等于 utf8mb4
)?谢谢。
创建 table 时要明确:
CREATE TABLE users (
name VARCHAR(99) NOT NULL,
...
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4;
另一种技术是忽略 table 默认值,并在每一列上明确显示:
CREATE TABLE users (
name VARCHAR(99) CHARACTER SET utf8mb4 NOT NULL,
...
) ENGINE=InnoDB;
可能发生的事情是你在两个地方都没有指定字符集,但是数据库上的DEFAULT
是utf8 .
rake db:reset
是错误的。 rake db:drop && rake db:create && rake db:migrate
正确。
reset
刚刚从已存储的模式创建了表,该模式具有错误的字符集和排序规则。但是从迁移中重新创建它们会使用新的字符集和排序规则创建它们。
问题是 db:reset
调用 db:schema:load
。如果您的 db/schema.rb
文件有错误的编码值,它将加载错误的内容。您可以修复 db/schema.rb
以在 运行 db:reset