Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

odoo使用tds_fdw扩展功能读取外部数据库数据编码问题



  • 用tds_fdw访问sqlserver中的表单数据(数据有中文)遇到了编码问题,在odoo代码中执行查询指令:
    sql = “select * from ext_erp_cicmp”
    self.env.cr.execute(sql)
    result = cr.dictfetchall()
    直接报错:‘utf-8’ codec can’t decode byte 0xb6 in position 0:…
    用pgadmin查询:server_encoding 和client_encoding 结果都是’UTF8’

    百度查到:
    由于MS SQL Server默认编码为GBK,而且Postgresql编码变UTF8,需要改变编码显示为GBK才能正常显示中文,但客户端设置set client_encoding to ‘GBK’后,在pgadmin中查询 “select * from ext_erp_cicmp”会报错22021



  • 😯 😯 😯 直接用odoo的cr 是不行的,odoo的cr 是psotgresql的游标,你要访问其他类型的数据库,要 安装 python插件,访问的。



  • @静静 谢谢!
    我安装pymssql,已经可以不通过tds_fdw扩展读取外部数据库数据。
    但如果我想在当前的postgresql数据库中做一个视图,调用外部sqlserver数据库中的表单,还没找到方法。



  • 根本听不懂你说的啥。。。如果我想在当前的postgresql数据库中做一个视图 这是啥意思? 调用外部sqlserver数据库中的表单 这又是啥意思,视图中调用别的数据库?。



  • @静静 意思就是odoo中创建一个视图,视图的数据直接通过调用外部扩展数据库中的表连接获得,这样就不需要本地创建表而把外部数据库的数据复制过来了



  • 问题解决:
    CREATE SERVER mssql_svr FOREIGN DATA WRAPPER tds_fdw options(servername ‘192.168.1.27’, character_set ‘utf-8’,port ‘1433’,database ‘001Test1’,tds_version ‘7.1’)
    在创建mssql_svr 时,添加参数 tds_version ‘7.1’