私はPython mysql-connectorモジュールを使用して、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))
このplane 1 unicode valueあるので、それは4つのバイトを必要とするが、テーブルやカラムを変更するas suggested hereをutf8mb4しますうまくいかなかった。
私は取得していますエラーは次のとおりです。
Incorrect string value: '\xF0\x9F\x90\xB1' for column 'c1' at row 1
と比較すると、挿入される文字列が正しいになります
chr(128049).encode('utf-8')
mariadbこのバージョンのsql_modeのは、デフォルトでは厳密ではありません。厳密なモードを指定しないと挿入が機能しますが、文字はデフォルトの '?'に変換されます。キャラクター。
私はSQLがこれが無効な文字列であると思う理由を理解できません。
私はmariadb 10.1.9にPython 3.6.1のmysql-connector 2.1.4で接続しています。