教你解决往mysql数据库中存入汉字报错的方法

  • Post category:Python

下面是“教你解决往mysql数据库中存入汉字报错的方法”的完整攻略:

背景

在应用程序中,往mysql数据库中存入汉字时,有时会遇到报错的问题,报错信息通常为“incorrect string value”。如何解决这个问题呢?

解决方法

1. 修改数据库字符集

在建库或者修改字段的时候,可以将数据库字符集设置为utf8mb4(支持四个字符集),以支持存储中文或其他特殊字符。具体步骤如下:

在建库时:

CREATE DATABASE `database_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在修改字段时:

ALTER TABLE `table_name` MODIFY COLUMN `column_name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

其中,table_name为表名,column_name为字段名。

2. 将客户端连接编码改为utf8mb4

在客户端连接数据库时,可以将编码设置为utf8mb4,以支持存储中文或其他特殊字符。具体步骤如下:

在连接数据库时,设置客户端编码:

import MySQLdb

db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="db_name", charset="utf8mb4")

其中,db_name为数据库名,password为密码,charset为编码设置。

示例说明

示例1

在建立库的时候修改字符集,具体步骤如下:

CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

然后在该数据库中建立一个名为student的表,表结构如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

在向该表中插入数据时,可以插入中文数据,示例如下:

INSERT INTO `student` (`name`, `age`) VALUES ('小明', 20);

通过这种方式,就可以向mysql数据库中存入汉字,不再报错。

示例2

在客户端连接数据库时,修改编码,具体步骤如下:

import MySQLdb

db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="test_db", charset="utf8mb4")

通过这种方式,客户端连接mysql数据库之后,就可以通过客户端向数据库中存入汉字,如下:

cursor = db.cursor()

sql = "INSERT INTO student (name, age) VALUES (%s, %s)"
val = ("小红", 19)
cursor.execute(sql, val)

db.commit()

这样通过在客户端设置相应编码方式,就可以向mysql数据库中存入汉字,不再报错。

以上就是解决往mysql数据库中存入汉字报错的方法。