J'utilise le module Python mysql-connector pour insérer le point de caractère Unicode 128049 (U + 1F431) dans une table mariaDB sql.Erreur de valeur de chaîne incorrecte - Python + mariaDB
Ma table SQL est définie comme:
show create table t1;
CREATE TABLE `t1` (
`c1` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
Et le code python est:
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))
Depuis c'est un plane 1 unicode value dont il a besoin de 4 octets, mais en changeant la table et la colonne à utf8mb4 as suggested here n'a pas fonctionné.
L'erreur que je reçois est:
Incorrect string value: '\xF0\x9F\x90\xB1' for column 'c1' at row 1
La chaîne étant insérée semble correct par rapport à:
chr(128049).encode('utf-8')
Le sql_mode pour cette version de MariaDB est pas stricte par défaut. Alors que l'insertion fonctionne quand je ne spécifie pas le mode strict, les caractères sont convertis à la valeur par défaut '?' personnage.
Je n'arrive pas à comprendre pourquoi SQL considère qu'il s'agit d'une chaîne non valide.
Je me connecte à mariadb 10.1.9 via mysql-connector 2.1.4 dans python 3.6.1.