pymssql (1366, “Incorrect string value: ‘\\xF0\\x9F\\x92\\x8E W...‘ for column ‘AppName‘ at row 1)

在处理emoji时,报错1366,原因是编码造成的

在mysql8里,字符集默认就是 utf8mb4,已支持emoji

python3默认就是utf8

原因就出在两个字符集上,utf8mb4是utf8的超集,mb4是most bytes 4的意思,专门用来兼容四字节的unicode

处理emoji时需要字符集支持unicode,utf8mb4是没问题的,但是utf8不行

只需要将python连接mysql的默认格式由utf8改为utf8mb4即

mysql_pool = Pool(maxActive=20, db_type=dbType.Mysql, host=host, port=port, user="root", password="******", charset='utf8mb4')

 

MySQL 1366 错误 “Incorrect string value: ‘\xF0\x9F\x98\x84’” 通常发生在尝试将包含 4 字节 UTF-8 字符(如表情符号)的数据插入到数据库时,而数据库或表的字符集设置为 `utf8`,而不是支持 4 字节字符的 `utf8mb4`。MySQL 的 `utf8` 字符集仅支持最多 3 字节的 UTF-8 编码,因此无法存储表情符号等 4 字节字符,从而导致插入失败[^4]。 ### 解决方法 #### 1. 修改数据库字符集 要支持 4 字节 UTF-8 字符,必须将数据库、表以及列的字符集设置为 `utf8mb4`,并使用 `utf8mb4_unicode_ci` 排序规则。可以使用以下 SQL 语句修改数据库字符集: ```sql ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 2. 修改数据表字符集 修改现有表的字符集和排序规则: ```sql ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 3. 修改列的字符集 如果需要仅修改特定列的字符集,可以使用以下语句: ```sql ALTER TABLE your_table_name CHANGE column_name column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 4. 检查并更新 MySQL 配置文件 为了确保所有新创建的数据库和表默认使用 `utf8mb4`,可以在 MySQL 的配置文件(如 `my.cnf` 或 `my.ini`)中添加以下配置: ```ini [client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` #### 5. 验证当前字符集设置 可以使用以下命令检查数据库、表和列的字符集设置: - 查看数据库字符集: ```sql SHOW CREATE DATABASE your_database_name; ``` - 查看表字符集: ```sql SHOW CREATE TABLE your_table_name; ``` - 查看列字符集: ```sql SHOW FULL COLUMNS FROM your_table_name; ``` #### 6. 确保连接使用 `utf8mb4` 在应用程序中,确保数据库连接也使用 `utf8mb4` 字符集。例如,在 PHP 中可以使用以下代码设置连接字符集: ```php $pdo = new PDO("mysql:host=localhost;dbname=your_database;charset=utf8mb4", "username", "password"); ``` 在 Java 中可以使用 JDBC 连接字符串: ```java jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_unicode_ci ``` ### 注意事项 - **MySQL 版本要求**:确保 MySQL 版本不低于 5.5.3,因为 `utf8mb4` 支持是在该版本中引入的[^4]。 - **性能影响**:使用 `utf8mb4` 会略微增加存储空间和内存使用,因为每个字符最多占用 4 字节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值