下面是“教你解决往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数据库中存入汉字报错的方法。