【问题标题】:Issue with saving cyrillic symbols to MSSQL via unixODBC and FreeTDS通过 unixODBC 和 FreeTDS 将西里尔符号保存到 MSSQL 的问题
【发布时间】:2016-02-02 01:14:17
【问题描述】:

我的环境与this相当相似

数据库中的所有非 unicode 数据都正确显示。 我能够将一些数据保存到数据库(ascii 和西里尔文)。标准 ascii 字符然后正确显示,但西里尔数据显示如下

Р В Р' Р’Р'В Р В РІР

如何找到发生错误编码/解码操作的点?

【问题讨论】:

  • 只调试你的程序。遵循每个步骤并验证每个点的数据仍然正确。不是我们可以提供帮助的东西,尤其是在没有任何代码行的情况下。

标签: django pyodbc freetds unixodbc


【解决方案1】:

我终于解决了一个问题。 settings.py 文件中正确的数据库配置是:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': '192.168.11.11',
        'PORT': '3306',
    },
    'mssql': {
        'ATOMIC_REQUESTS': True,
        'NAME': 'DB',
        'ENGINE': 'django_pyodbc',
        'USER': 'admin',
        'PASSWORD': 'pass',
        'OPTIONS': {
            'dsn': 'DBDSN',
            'host_is_server': True,
            'collation': 'Cyrillic_General_CI_AS',
            'driver_supports_utf8': True,
            'unicode_results':  True,
            'autocommit': True,
        },
    }
}

/etc/freetds/freetds.conf

[global]
tds version = 7.3
text size = 64512

[SRV]
host = mssql.local
port = 1433

/etc/odbc.ini

[ODBC Data Sources]
DBDSN = Microsoft SQL Server

[DBDSN]
Driver = FreeTDS
Servername = SRV
Trace = No
Database = DB

/etc/odbcinst.ini

[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1

重要的一点是 odbc.ini 和 odbsinst.ini 文件的行首不应包含空格或制表符。 这些设置允许西里尔符号正常插入到数据库中。

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 2013-05-31
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2011-05-31
    • 2018-02-19
    • 2020-10-12
    相关资源
    最近更新 更多