3

次の問題があり、1 時間検索しても適切な解決策が得られませんでした。

「長いテキスト」列を持つMySQLデータベーステーブルがあります。そのテキスト列にファイルのコンテンツを格納するために使用するスペースを少なくするために、PHP ではコンテンツを格納するために次の圧縮アプローチが使用されています。

$compressed_content = bzcompress($content);
$db_compressed_content = addslashes($compressed_content);

「db_compressed_content」は、PHP 自体を使用してデータベースに保存されます。

これで、Django を使用してデータベースのコンテンツを利用できるようになりました。テーブルを表すモデル クラスを思いつくことができました。「TextField」は、その特定の列を表すために使用されます。

ここに私の正確な問題があります。Pythonの「bz2.decompress()」を使用して解凍し、テキストコンテンツを取得しましたが、djangoで「UnicodeEncodeError」を取得しようとしたときに取得しています。

参考までに、PHP を使用してデータベースにコンテンツを格納するために使用される文字セットは「latin-1」でした。

4

1 に答える 1

6

回答: Django はデータベースのデフォルト文字セットとして「utf-8」を使用するため、データベースが他の文字セットを使用する場合 (ほとんどのレガシー データベースは「latin1」で構成されます)、データベース設定でその文字セットを明示的に指定する必要があります。設定例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test_db',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '3306',
        'OPTIONS': {
                    'charset': 'latin1',
                    'use_unicode': True, },
    }, 
}

これに加えて、ユニコードを使用する必要がない場合は、「use_unicode」を False に設定できますが、それはお勧めできません。

乾杯 !!!

于 2014-02-25T18:14:21.317 に答える