为什么我不能在这个 mysql 字段中存储 4 字节的表情符号?



我有一个数据库,我要求在一个表中只有两个字段允许存储4字节的表情符号。我这样做了(显然使用了正确的表名和列名):

ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

我知道它成功了,因为当我执行show create table chatbots_proposalarea;时,它显示了这个:

CREATE TABLE `chatbots_proposalarea` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_bin NOT NULL,
`proposal` varchar(1500) COLLATE utf8mb4_bin DEFAULT NULL,
`candidate_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `chatbots_proposalare_candidate_id_6465160e_fk_chatbots_` (`candidate_id`),
CONSTRAINT `chatbots_proposalare_candidate_id_6465160e_fk_chatbots_` FOREIGN KEY (`candidate_id`) REFERENCES `chatbots_candidate` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

字段的"名称";和";proposal"似乎有uft8mb4_bin排序,并且在运行命令时没有显示错误。但是,当我尝试在那里保存一个值时,例如"Seguridad🍞",它给了我错误

ERROR 1366 (HY000): Incorrect string value: 'xF0x9Fx8Dx9E' for column 'name' at row 1

任何帮助发现我错过了什么将非常感激。

指出

这是一个Django项目,挂载在Ubuntu服务器上,SQL版本是mysql Ver 14.14 Distrib 5.7.28, for Linux (x86_64)我不明白为什么会有什么不同,但是当我通过

直接更新到数据库时,也会发生同样的情况
UPDATE chatbots_proposalarea SET name='Seguridad 🍞' where id=1;

建议了一个解决方案,但该解决方案取决于触发器的使用,这是问题的原因,这不是我的情况。

如果显示任何重要信息,当我运行show variables where Variable_name like 'character_set_%' or Variable_name like 'collation%';我得到以下内容:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_general_ci |
| collation_server         | utf8mb4_general_ci |
+--------------------------+--------------------+

我将这些值更改为与同事在他的一个项目中的值相同,在该项目中他也需要存储4字节的表情符号。

这不是表格的错;这是一种联系。比如:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS': {
'charset': 'utf8mb4',
'use_unicode': True, },
},
}

相关内容

  • 没有找到相关文章

最新更新