MySQL
版本为:
mysql Ver 14.14 Distrib 5.6.40, for Linux (x86_64) using EditLine wrapper
我已经准备好了 utf8mb4
在 database
, table
, column
使用以下命令:
ALTER DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql报告说:
mysql> show create database my_db;
+----------+---------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------+
| my_db | CREATE DATABASE `my_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+---------------------------------------------------------------------+
1 row in set (0.00 sec)
还有表格:
ALTER TABLE my_tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
``` `Mysql` 报告指出:
...
) ENGINE=InnoDB AUTO_INCREMENT=14894 DEFAULT CHARSET=utf8mb4
现在字段本身也通过以下方式转换:
ALTER TABLE my_tbl MODIFY body mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
它报告说:
body
mediumtext
一切似乎都很好。当我连接到 `mySQL` 我通过python设置排序规则:
my_connection.set_character_set('utf8mb4')
现在,当我插入数据时,错误报告:
OperationalError: (1366, "Incorrect string value: '\xF0\x9F\x98\x9E</...' for column 'body' at row 1")
为什么会出现这样的错误?我该如何解决这个问题?或者有什么解决办法吗?
编辑第1部分:
CREATE TABLE my_tbl
(id
int(11) NOT NULL AUTO_INCREMENT,for_id
varchar(100) NOT NULL,uid
varchar(50) DEFAULT NULL,sent_at
datetime DEFAULT NULL,rec_type
varchar(30) DEFAULT NULL,body
mediumtext CHARACTER SET utf8mb4,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=112774 DEFAULT CHARSET=utf8mb4
上面的字符集在我的table上。在没有列的前面我可以看到排序规则类型。正如我之前所说,我已经发出了命令 `Modify` 命令。这里有什么问题吗?
在 `my.cnf` 我设置了以下内容并重新启动了mysql:
[mysqld]
collation-server = utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
1条答案
按热度按时间83qze16e1#
set_character_set
是三件事之一。有关python的详细信息:http://mysql.rjweb.org/doc.php/charcoll#python (但使用
utf8mb4
上面写着什么utf8
).检查列是否真的设置为utf8mb4:do
SHOW CREATE TABLE
.