我正在使用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。