【发布时间】:2018-03-29 21:05:30
【问题描述】:
我正在使用 Python mysql-connector 模块将 unicode 字符点 128049 (U+1F431) 插入到 mariaDB sql 表中。
我的SQL表定义为:
show create table t1;
CREATE TABLE `t1` (
`c1` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
而python代码是:
import mysql.connector as db
conn = db.connect(sql_mode = 'STRICT_ALL_TABLES')
curs = conn.cursor(prepared = True)
curs.execute('insert into t1 (c1) values(%)', chr(128049))
由于这是一个plane 1 unicode value,它需要 4 个字节,但是将表和列更改为 utf8mb4 as suggested here 不起作用。
我得到的错误是:
Incorrect string value: '\xF0\x9F\x90\xB1' for column 'c1' at row 1
与以下内容相比,插入的字符串看起来正确:
chr(128049).encode('utf-8')
这个版本的 mariadb 的 sql_mode 默认不严格。虽然当我没有指定严格模式时插入有效,但字符会转换为默认的“?”字符。
我不明白为什么 SQL 认为这是一个无效的字符串。
我在 python 3.6.1 中通过 mysql-connector 2.1.4 连接到 mariadb 10.1.9。
【问题讨论】:
标签: python mysql unicode utf-8 mariadb