首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

中文入mysql报错

问题概述

在将中文数据插入MySQL数据库时遇到报错,通常是由于字符集设置不正确导致的。

基础概念

MySQL中的字符集(Character Set)和排序规则(Collation)决定了如何存储和比较字符数据。常见的字符集包括utf8utf8mb4等。

相关优势

  • utf8mb4:支持存储4字节的Unicode字符,包括emoji表情,而utf8仅支持最多3字节的UTF-8编码。
  • utf8:占用空间较小,适用于不需要存储4字节字符的场景。

类型

  • utf8_general_ci:不区分大小写,性能较好,但比较时可能会忽略重音符号。
  • utf8_unicode_ci:区分大小写,比较时考虑重音符号,适用于需要精确比较的场景。

应用场景

  • utf8mb4_general_ci:适用于大多数需要存储Unicode字符的场景,包括中文、日文、韩文等。
  • utf8mb4_unicode_ci:适用于需要精确比较Unicode字符的场景,如国际化应用。

常见问题及解决方法

1. 报错信息

代码语言:txt
复制
ERROR 1366 (HY000): Incorrect string value: '\\xE6\\x88\\x91\\xE7\\x88\\xB1...' for column 'column_name' at row 1

2. 原因

  • 数据库、表或列的字符集设置不正确,无法存储中文字符。

3. 解决方法

3.1 修改数据库字符集
代码语言:txt
复制
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.2 修改表字符集
代码语言:txt
复制
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.3 修改列字符集
代码语言:txt
复制
ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.4 修改连接字符集

在连接数据库时设置字符集:

代码语言:txt
复制
import pymysql

conn = pymysql.connect(
    host='localhost',
    user='user',
    password='password',
    db='database_name',
    charset='utf8mb4'
)

参考链接

通过以上步骤,可以有效解决中文插入MySQL报错的问题。确保数据库、表和列的字符集设置正确,并在连接数据库时指定正确的字符集。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mysql floor报错注入_mysql报错注入总结

    最近又深刻的研究了一下mysql报错注入,发现很多值得记录的东西,于是写了这篇博客做一个总结,目的是为了更深刻的理解报错注入 报错注入原因及分类 既然是研究报错注入,那我们先要弄明白为什么我们的注入语句会导致数据库报错...writeup中学到的,在我的另一篇文章中会提到 基于数据类型不一致而产生的报错:mysql的一些函数参数要求的是什么数据类型,如果数据类型不符合,自然就会报错,这种报错也是相对容易理解的,根据这种特性产生的报错注入有...updatexml,extractvalue等注入手法 基于BIGINT溢出错误的SQL注入,根据超出最大整数溢出产生的错误,这类报错注入是在mysql5.5.5版本后才产生的,5.5.5版本前并不会因为整数溢出而报错...,这种注入自己在phpstudy上试了试,mysql版本为5.5.53,虽然报错了但是并没有爆出信息,以后研究出来再补充 其他报错,企业级代码审计这本书上看到的,一些mysql空间函数geometrycollection...的错误,里面同时包含了我们构造查询语句的信息 原理分析 接下来对上面列出的一些报错注入一个个进行分析 基于主键值重复 floor(rand(0)*2):我们在进行报错注入时用的相对较多的方法,网上给出的报错语句大部分是这样的

    2.6K40

    MySQL报错1062_mysql数据库报错

    mysql在主从复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。...slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句 mysql主从库同步错误:1062 Error...‘Duplicate entry ‘1438019’ for key ‘PRIMARY’’ on query mysql主从库在同步时会发生1062 Last_SQL_Error: Error ‘Duplicate...> slave stop; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> slave start; 方法二:修改mysql配置文件,让他自己跳过...修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 保存重启mysql 发布者:全栈程序员栈长,转载请注明出处:https:

    2.2K30

    MySQL报错汇总

    Ignoring query to other database  【报错原因】   登陆数据库缺少参数 [root@localhost ~]# mysql -root -p 【解决方法】   补全的参数...query specified 【报错原因】   sql语句后加“;” mysql> select * from user \G; 【解决方法】   sql语句后不加“;” mysql> select...server on 'xxxxx'(10060 "Unknown error") ssh可以正常登陆,ssh访问通过mysql命令可以进入数据库,使用Navicat连接报错报错原因】   防火墙问题...】 mysql版本的问题,5.7.27版本 【解决办法】 MySQL [mysql]> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,...【报错原因】 mysql5.7版本,安全机制做了改变,直接写不行了 【解决办法】 vi /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock

    8610

    浅出 MySQL 索引

    MySQL中的索引 首先,MySQL 和索引其实没有直接的关系。索引其实是 MySQL 中使用的存储引擎 InnoDB 中的概念。...这里说明一下,现在有很多的博客说,MySQL 使用 InnoDB 时,一张表最多只能创建 16 个索引,首先这是错的,明显是从其他的地方直接抄过来的,自己没有去做任何的验证。...在 MySQL 的官方文章中,明确的说明了,一张表最多可以创建 64 个非聚簇索引,而且创建非聚簇索引时,列的数量不能超过16个。 注意,是创建非聚簇索引的列不能超过16个!...首先,MySQL 并不会把数据存储在内存中,内存只是作为运行时的一种优化,关于 InnoDB 内存架构相关的东西,之前已经写了一篇文章,感兴趣的可以先去看看。...这也是为啥在 MySQL 中,随机 I/O 对其查询的性能影响很大的原因。

    37230

    浅出 MySQL 索引

    为什么要有mysql 索引,解决了什么问题,其底层的原理是什么?为什么使用B+树做为解决方案?用其他的像哈希索引或者B树不行吗? 简单了解索引 首先,索引(Index)是什么?...MySQL中的索引 首先,MySQL 和索引其实没有直接的关系。索引其实是 MySQL 中使用的存储引擎 InnoDB 中的概念。...这里说明一下,现在有很多的博客说,MySQL 使用 InnoDB 时,一张表最多只能创建 16 个索引,首先这是错的,明显是从其他的地方直接抄过来的,自己没有去做任何的验证。...首先,MySQL 并不会把数据存储在内存中,内存只是作为运行时的一种优化,关于 InnoDB 内存架构相关的东西,之前已经写了一篇文章,感兴趣的可以先去看看。...这也是为啥在 MySQL 中,随机 I/O 对其查询的性能影响很大的原因。

    29310
    领券