MySQL插入数据 报错Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column”问题

出现这个报错的原因一般有两个,第一个原因是向数据库存入中文字符时,编码方式出错导致的。第二个是在建表的时候设置的变量类型长度过小或者是存入字符过长,类型不适用

一、下面这段代码是建立数据库和表的正确方法,可以避免第一种原因。

def __init__(self):
    #建立连接
    self.conn=pymysql.connect(MYSQL_HOST,MYSQL_USER,MYSQL_PWD,charset='utf8',port=3306)
    #建立游标
    self.cursor=self.conn.cursor()
    #创建一个名为xina的数据库
    #使用execute()方法执行SQL,如果数据库存在则删除
    self.cursor.execute("DROP DATABASE IF EXISTS xina;")
    self.cursor.execute('create database if not exists xina character set utf8mb4;')
    self.cursor.execute('use xina;')
    # 创建表并定义变量类型

    sql1 = 'create table if not exists news(NEWS_TITLE TEXT,NEWS_TIME date,NEWS_ARTICLE 
    TEXT) character set utf8mb4'
    self.cursor.execute(sql1)

(1)在建立连接的时候,要设置charset=‘utf8’

(2)在创建数据库的时候,sql语句最后要加  set  utf8mb4

(3)在建表的时候,sql语句最后要加  set utf8mb4

二、如果第一种已经设置了,但是还是会有报错,可以先看下数据库中是否存入部分数据,或者可以使用sql语句试着存入一条数据,看能否成功。也可以先去看下自己要存的数据的长度和设置的变量的长度是否匹配。因为我是爬取新闻数据之后要存入mysql,数据长度过长,导致报错。之前的建表代码是这样的。

sql1 = 'create table if not exists news(NEWS_TITLE varchar(255),NEWS_TIME date,NEWS_ARTICLE VARCHAR(255)) character set utf8mb4'
self.cursor.execute(sql1)

之后看了下自己要存的数据,差不多有两千多个中文,就将变量的类型改了一下。将VARCHAR(255)改成了TEXT,在pycharm中输入sql语句的时候变量类型会自动变黄,但是我刚开始输入TEXT的时候没有变黄,也没有默认的类型,还以为没有这个数据类型,但其实是有的。将代码改成如下就可以存入了。

sql1 = 'create table if not exists news(NEWS_TITLE TEXT,NEWS_TIME date,NEWS_ARTICLE TEXT) character set utf8mb4'
self.cursor.execute(sql1)

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,你在Kettle更新数据时遇到了错误信息"Incorrect string value: '\xF0\x9F\x91\xA9\xE7\xBC...' for column 'content' at row 1"。这个错误通常是由于数据库字符集不支持存储特定的字符导致的。为了解决这个问题,你可以尝试以下几种方法: 1. 检查数据库字符集:首先,你需要确认数据库的字符集是否支持存储你要插入的特殊字符。可以通过执行以下SQL语句来查看数据库的字符集: ```sql SHOW VARIABLES LIKE 'character_set_database'; ``` 如果字符集不支持存储特殊字符,你可以考虑修改数据库的字符集或者使用支持存储特殊字符的字符集。 2. 修改表字段的字符集:如果数据库的字符集支持存储特殊字符,但是表字段的字符集不匹配,你可以尝试修改表字段的字符集。可以使用ALTER TABLE语句来修改表字段的字符集,例如: ```sql ALTER TABLE your_table MODIFY COLUMN content VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 这里的utf8mb4是一种字符集,可以存储更广泛的Unicode字符。 3. 修改Kettle连接的字符集:如果数据库和表字段的字符集都正确设置,但是Kettle连接的字符集不匹配,也会导致这个错误。你可以在Kettle的连接配置修改字符集,确保与数据库的字符集一致。 请注意,修改字符集可能会影响到现有数据,所以在进行任何修改之前,请务必备份你的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值