为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8 24.06.21
【操作系统】: WINDOWS 11
【CPU】: AMD Ryzen 7 5800H
【问题描述】*:
dmPython 2.5.5
使用的数据库连接池 dmPython.cp312-win_amd64.pyd
我们在尝试使用python来做原型时遇到了一个问题,录入的数据中存在生僻字 䶮 ,通过报错如下:
实现伪代码如下
data_values = '䶮'
data_values = data_values.astype(str).str.encode('GB18030').str.decode('GB18030')
cursor = conn.cursor()
sql = f"insert into {tablename} values {data_values}"
cursor.execute(sql)
conn.commit()
执行时会报错:
'gbk' codec can't encode character '\u4dae' in position 38: illegal multibyte sequence
我确认了一下,库的编码是GB18030,源数据是UTF8,两个编码都有这个字,并且我们直接在数据库中insert into '䶮' 这个字时也能正常入库。
但是通过代码入库时就会报错。我们也转换了录入的文本格式,是不是JDBC这边还会强转回GBK?请问这个情况要怎么处理?
做个实验,在python连接数据库时加上local_code参数,你客户端是UTF8编码,那就是 local_code=1
类似于
conn = dmPython.connect(user='*****', password='*****', server='DMRW',port=5236,local_code=1)
可以参考官方文档
dmPython.connect