为什么可以';我是否在这个mysql字段中存储4字节的表情符号?
我有一个数据库,我要求一个表中只有两个字段允许存储4字节的emojis。我这样做了(显然使用了正确的表名和列名): 我知道它是有效的,因为当我做为什么可以';我是否在这个mysql字段中存储4字节的表情符号?,mysql,collation,Mysql,Collation,我有一个数据库,我要求一个表中只有两个字段允许存储4字节的emojis。我这样做了(显然使用了正确的表名和列名): 我知道它是有效的,因为当我做show create table chatbots\u proposalarea它向我显示以下内容: CREATE TABLE `chatbots_proposalarea` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8mb4_bin NOT NU
show create table chatbots\u 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
字段“name”和“proposal”似乎具有uft8mb4_bin排序规则,并且在运行命令时没有显示错误。但是,当我尝试在那里保存一个值时,例如“segurida,这不是表的错误;这是连接。类似于:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS': {
'charset': 'utf8mb4',
'use_unicode': True, },
},
}
我测试了这个,它对我有效。使用MySQL 5.7.27。这能回答你的问题吗?我在这些系统变量中看到很多“utf8”。它应该都是“utf8mb4”“.Yeah,我的都是‘utf8mb4’,除了不能更改的字符集系统
。我更改了变量,变量保持不变,我更新了问题,尽管当我直接在mysql控制台上做一个UPDATE语句时会发生同样的情况,但情况不是这样,或者是这样吗?”?不仅仅是当我通过Django更新时。每个连接都控制自己的字符集(etc)选项。我展示的是给Django的。命令行“mysql”工具可以使用设置名称utf8mb4代码>在运行查询之前。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
...
'OPTIONS': {
'charset': 'utf8mb4',
'use_unicode': True, },
},
}