我正在使用Python mysql连接器模块将unicode字符点128049(U + 1F431)插入到mariaDB sql表中。不正确的字符串值错误 - Python + mariaDB
我的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))
由于这是它需要4个字节的plane 1 unicode value,但改变表和列到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。