【问题标题】:Trying to save special characters in MySQL DB尝试在 MySQL DB 中保存特殊字符
【发布时间】:2017-02-02 21:46:57
【问题描述】:

我有一个看起来像这样的字符串????Use O Mozilla Que Não Trava! Testei! $vip ou $apoio

当我尝试使用 ...SET description = %s...cursor.execute(sql, description) 将其保存到我的数据库时,它给了我一个错误

警告:(1366,“不正确的字符串值:'\xF0\x9F\x94\xB4Us...' 列'description' ...

假设这是一个 ASCII 符号,我尝试了 description.decode('ascii') 但这会导致

'str' 对象没有属性'decode'

如何确定它是什么编码以及如何将类似的内容存储到数据库中?如果重要的话,数据库是 utf-8 编码的。

我正在使用 Python3 和 PyMySQL。

感谢任何提示!

【问题讨论】:

    标签: python mysql python-3.x pymysql


    【解决方案1】:

    首先,您需要确保表格列具有正确的字符集设置。如果是“latin1”,您将无法存储包含 Unicode 字符的内容。

    您可以使用以下查询来确定列字符集:

    SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='your_database_name' AND TABLE_NAME='your_table_name' AND COLUMN_NAME='description'
    

    如果要更改列字符集,请遵循 Mysql 文档here

    另外,您需要确保为 Mysql 连接正确配置了字符集。引用自 Mysql 文档:

    字符集问题不仅会影响数据存储,还会影响 客户端程序和 MySQL 服务器之间的通信。如果你 希望客户端程序使用 字符集与默认值不同,您需要指明 哪一个。例如,要使用 utf8 Unicode 字符集,请发出 连接服务器后的这条语句:

    SET NAMES 'utf8';
    

    一旦字符集设置正确,你就可以执行你的sql语句了。无需在 Python 端进行编码/解码。这用于不同的目的。

    【讨论】:

    • 第一个查询给出utf8 我用pyMysql 用connect = pymysql.connect(host=constants.HOST, user=constants.USERNAME, password=constants.PASSWORD, db=constants.DATABASE, charset='utf8', port=constants.PORT, cursorclass=pymysql.cursors.DictCursor) 初始化所以实际上应该没有问题?
    • @PrimuS 刚刚注意到有一个表情符号。列字符集需要 utf8mb4。 utf8 是不够的。见stackoverflow.com/questions/35125933/…
    猜你喜欢
    • 2017-02-03
    • 2023-03-26
    • 2012-04-24
    • 1970-01-01
    • 2015-06-14
    • 2015-02-14
    • 2011-02-15
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多