【发布时间】:2016-02-22 02:51:30
【问题描述】:
在具有 MySQL DB 后端用户的 Django 应用程序中,尝试插入包含一些表情符号和心形以及 Unicode 字符的内容的注释。 MySQL 拒绝操作并报错:
(1366, "Incorrect string value: '\\xE2\\x9D\\xA4\\xEF\\xB8\\x8F' for column 'note' at row 1")
(有问题的列具有longtext 类型。在这种情况下,Unicode 字符有效,它是心脏和修饰符https://codepoints.net/U+2764https://codepoints.net/U+FE0F,所以它们不是4 字节长的UTF-8 字符。我确定 MySQL 的默认字符集是 utf-8。)
有趣的是,我无法在本地开发人员环境中完全重现此错误。一个特别的区别是它只针对该异常发出警告。
更新1:
这仍然困扰着我:
mysql> SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name="sblive";
+----------------------------+
| default_character_set_name |
+----------------------------+
| latin1 |
+----------------------------+
1 row in set (0.00 sec)
我将特定表的字符集转换为 utf-8:
mysql> alter table uploads_uploads convert to character set utf8 COLLATE utf8_general_ci;
Query OK, 1209036 rows affected (1 min 10.31 sec)
Records: 1209036 Duplicates: 0 Warnings: 0
mysql> SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = "sblive" AND table_name = "uploads_uploads" AND column_name = "note";
+--------------------+
| character_set_name |
+--------------------+
| utf8 |
+--------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
mysql> SHOW VARIABLES LIKE '%colla%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
【问题讨论】:
标签: mysql configuration character-encoding warnings non-ascii-characters