MySQLdb 没有将表设置为 UTF-8
MySQLdb not setting tables to UTF-8
我指定数据库应该是 utf8mb4
:
CREATE DATABASE IF NOT EXISTS MY_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后我 运行 一个脚本来创建表并从一些平面文件填充表。这些文件有 latin1
个字符,并以 latin1
编码打开。
数据库的表在 models.py
文件中指定,因为这是一个 Django
应用程序。 Django 文档说你像我创建数据库时那样指定编码。
数据加载,但在 MySQL Workbench 中,表格看起来是 'latin1':
SELECT
`tables`.`TABLE_SCHEMA`,
`tables`.`TABLE_NAME`,
`tables`.`TABLE_COLLATION`,
`collations`.`character_set_name`
FROM
`information_schema`.`TABLES` AS `tables`,
`information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
`tables`.`table_schema` = DATABASE()
AND `collations`.`collation_name` = `tables`.`table_collation`
;
query output
为什么表格看起来是 latin1
,我怎样才能使它们成为 utf8mb4
?
尝试使用以下查询。
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
原来 CREATE DATABASE...
命令在两个地方被调用。我正在编辑第二个,它没有被使用,因为数据库已经存在。当我将 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
添加到第一个 CREATE DATABASE
命令时,表格获得了正确的字符集。
table 的字符集和排序规则无关紧要;它只是添加新列时使用的默认值。重要的是列的设置。用这个找出来:
SHOW CREATE TABLE mytable
(有一种方法可以使用information_schema
。COLUMNS
。)
数据是如何加载的?如果您(或代表您的 Django)使用 LOAD DATA INFILE
,那么它是否有一个 CHARACTER SET
子句?需要这样说 data 的编码是什么。这 不需要 需要与数据将进入的列的字符集相同。
进一步的 Django 注释:
数据库 = {
'default':{
'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS':{
'charset': 'utf8mb4',
'use_unicode':正确,},
},
}
my.cnf:
[mysqld]
字符集服务器=utf8mb4
默认排序规则=utf8mb4_unicode_ci
[客户]
默认字符集=utf8mb4
我指定数据库应该是 utf8mb4
:
CREATE DATABASE IF NOT EXISTS MY_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后我 运行 一个脚本来创建表并从一些平面文件填充表。这些文件有 latin1
个字符,并以 latin1
编码打开。
数据库的表在 models.py
文件中指定,因为这是一个 Django
应用程序。 Django 文档说你像我创建数据库时那样指定编码。
数据加载,但在 MySQL Workbench 中,表格看起来是 'latin1':
SELECT
`tables`.`TABLE_SCHEMA`,
`tables`.`TABLE_NAME`,
`tables`.`TABLE_COLLATION`,
`collations`.`character_set_name`
FROM
`information_schema`.`TABLES` AS `tables`,
`information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
`tables`.`table_schema` = DATABASE()
AND `collations`.`collation_name` = `tables`.`table_collation`
;
query output
为什么表格看起来是 latin1
,我怎样才能使它们成为 utf8mb4
?
尝试使用以下查询。
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
原来 CREATE DATABASE...
命令在两个地方被调用。我正在编辑第二个,它没有被使用,因为数据库已经存在。当我将 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
添加到第一个 CREATE DATABASE
命令时,表格获得了正确的字符集。
table 的字符集和排序规则无关紧要;它只是添加新列时使用的默认值。重要的是列的设置。用这个找出来:
SHOW CREATE TABLE mytable
(有一种方法可以使用information_schema
。COLUMNS
。)
数据是如何加载的?如果您(或代表您的 Django)使用 LOAD DATA INFILE
,那么它是否有一个 CHARACTER SET
子句?需要这样说 data 的编码是什么。这 不需要 需要与数据将进入的列的字符集相同。
进一步的 Django 注释:
数据库 = { 'default':{ 'ENGINE': 'django.db.backends.mysql', ... 'OPTIONS':{ 'charset': 'utf8mb4', 'use_unicode':正确,}, }, } my.cnf:
[mysqld] 字符集服务器=utf8mb4 默认排序规则=utf8mb4_unicode_ci
[客户] 默认字符集=utf8mb4