【问题标题】:Mysql doesn't return existing row from Aqua data studio or from DjangoMysql 不会从 Aqua 数据工作室或 Django 返回现有行
【发布时间】:2014-09-19 11:46:36
【问题描述】:

我有一个特殊的问题:

我有一个表格,它在某些列中包含 varchars 和希腊文文本,有时还混入了一些英文。

当我进行如下选择查询时:

select * from table where col_name = 'Greek String'

select * from table where col_name like '%Greek String%'

(当然“希腊字符串”是希腊字母)

如果这些查询是从 mysql 控制台调用的,它们会返回正确的行 如果从 Aqua Data Studio 内部或从 Django(使用 Django 查询方法,使用数据模型)调用它们,则它们不会返回任何内容!

如果 col_name = 'Latin String' 或 col_name like '%Latin String%',则相同的查询会从任何地方正确返回所有内容

数据库的默认字符集是latin1

表格的默认字符集是希腊语和

有问题的列的默认字符集也是希腊语

有人知道为什么会这样吗?

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    Django 的默认字符集是 utf8。最好的方法是将您的数据库字符集也转换为 utf8。否则,您可以在 settings.py 中设置另一个字符集,在 'DATABASES' 下指定键 'OPTIONS' 并添加如下内容:

    'OPTIONS': { 'charset': 'latin1', 'use_unicode': True, # this line could eventually also be needed }

    不过,我建议在整个项目中始终使用 utf8。您可以在 utf8 中使用希腊字母。

    【讨论】:

    • 官方文档说:你可以使用命令行工具和这个SQL创建你的数据库:CREATE DATABASE <dbname> CHARACTER SET utf8;这确保所有表和列默认使用UTF-8。更多详情请访问:docs.djangoproject.com/en/1.7/ref/databases/…
    • 比你,知道这是一件有用的事情!问题是我使用的旧数据库也包含大量数据,因此 CHARACTER SET 在创建时已经设置。有没有一种安全的方法来更改现有数据库的 CHARACTER SET 而无需转储、删除并重新创建它?
    猜你喜欢
    • 2017-09-28
    • 2012-10-30
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多