【问题标题】:How do I format my MySql table to avoid a "Incorrect string value" error?如何格式化 MySql 表以避免“不正确的字符串值”错误?
【发布时间】:2020-06-21 22:03:55
【问题描述】:

我正在使用 Python 3.7、Django 2.0 和 Mysql 5.7,它们都是通过 docker 容器设置的。我正在尝试将以下种子数据插入到我的一张表中...

- model: address.state
  pk: 14970
  fields:
    name: "Xocal\u0131"
    code: XCI
    country: 266

这会导致 MySql 错误,“无法加载地址.State(pk=14750): (1366, "Incorrect string value: '\xC4\x81n' for column 'name' at row 1")”

web_1     |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 209, in execute
web_1     |     res = self._query(query)
web_1     |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/cursors.py", line 315, in _query
web_1     |     db.query(q)
web_1     |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 239, in query
web_1     |     _mysql.connection.query(self, query)
web_1     | django.db.utils.OperationalError: Problem installing fixture '/app/maps/fixtures/state_data.yaml': Could not load address.State(pk=14750): (1366, "Incorrect string value: '\\xC4\\x81n' for column 'name' at row 1")

下面是我的表格描述...

+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| address_state | CREATE TABLE `address_state` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(165) NOT NULL,
  `code` varchar(3) NOT NULL,
  `country_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `address_state_name_country_id_a46a5987_uniq` (`name`,`country_id`),
  KEY `address_state_country_id_0a4efd43_fk_address_country_id` (`country_id`),
  CONSTRAINT `address_state_country_id_0a4efd43_fk_address_country_id` FOREIGN KEY (`country_id`) REFERENCES `address_country` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

如何格式化表格以便正确插入值?该表是通过基于Django地址模块的迁移自动生成的——https://github.com/furious-luke/django-address

【问题讨论】:

    标签: python mysql django python-3.x docker


    【解决方案1】:

    CHARSET=latin1 是重要的一点。

    您可以更改表格字符集:

    ALTER TABLE address_state CHARSET=utf8mb4
    

    【讨论】:

    • 谢谢。就这些表似乎是从我的 Django 迁移中生成的而言,您不会碰巧知道我需要做什么来更改其中的字符集,对吗?
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2014-10-12
    • 2018-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多