遇到的问题
在用Django框架对微博超话内容进行爬虫时,遇到了1366, Incorrect string value: '\\xF0\\x9F\\xA5\\x9A\\xE6\\x9C...' for colum问题,后发现是因为mysql不能识别4个字节的utf8编码的字符,所以抛出了异常。
关于mysql存储emoji表情符号的问题,网上有很多解决方法,这里不过多阐述。
但是仅仅改mysql里的配置是不够的,这里仅限手工输入时可以存储emoji表情符号,在用Django框架连接mysql来存储时,依旧会报错。
所以还需在Django中修改数据库连接的配置,详细步骤如下。
解决方法
(1)mysql/my.ini文件中修改配置
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
(2)修改数据库,表,列的字符集规则
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
或者可以直接在Navicat中设置:
(3)最关键的一步,也是Django项目独有的一步
在Django项目的settings.py文件中,必须设置 charset=utf8mb4
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '', #数据库名字
'USER':'', #用户名
'PASSWORD':'', #密码
'HOST':'',
'PORT':,
'OPTIONS': {'charset': 'utf8mb4'}, #修改django连接数据库时的字符集
}
}