当使用mysql数据库时,中文数据可能会出现乱码情况。下面是解决mysql中文乱码问题的方法集锦:
设置mysql字符集
在mysql数据库中,字符集分为两部分:一是服务器字符集,也叫默认字符集;二是数据库字符集,也叫库表字符集。如果两部分字符集不一致,中文数据就会出现乱码。所以,第一步是要设置服务字符集和库表字符集。
设置服务字符集
可以通过修改mysql配置文件/etc/mysql/my.cnf来实现。找到[mysqld]节点,在这个节点下添加下面的语句:
[mysqld]
character-set-server=utf8
这里配置的是服务字符集为utf8。注意,还需要将所有库表的字符集都设置为utf8,否则中文数据仍然会出现乱码。
设置库表字符集
创建数据库时设置库表字符集
创建数据库时可以设置库表字符集,如下所示:
CREATE DATABASE `example` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改已有数据库库表的字符集
修改库表字符集有两种方法:一是通过SQL命令行修改,另一种是通过图形化界面修改。这里介绍SQL命令行的修改方式。
修改数据库字符集
ALTER DATABASE `example` CHARACTER SET utf8 COLLATE utf8_general_ci;
修改表字符集
ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
修改数据源配置
使用不同的编程语言连接mysql数据库时,需要配置不同的数据源,比如Java需要配置数据源为utf8。以下是Java的一个例子:
String url="jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&user=xxx&password=xxx";
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(url);
这里的url中有3个参数需要关注:"useUnicode=true"表示使用Unicode编码;"characterEncoding=UTF-8"表示字符编码为UTF-8;最后一个参数是用户名和密码。
示例说明
示例1:使用Java连接mysql数据库
Java代码如下所示,首先连接mysql数据库,然后将中文数据插入到表中,最后读取表中所有数据并输出。
String url="jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&user=xxx&password=xxx";
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(url);
Statement stmt=con.createStatement();
String sql="CREATE TABLE `user` (`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(45) NULL,PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;";
stmt.executeUpdate(sql);
sql="INSERT INTO `user`(`name`) VALUES ('张三'),('李四'),('王五')";
stmt.executeUpdate(sql);
ResultSet rs=stmt.executeQuery("SELECT * FROM `user`");
while (rs.next()){
System.out.println("id:"+rs.getInt(1)+",name:"+rs.getString(2));
}
rs.close();
stmt.close();
con.close();
示例2:使用Python连接mysql数据库
Python代码如下所示,同样是连接mysql数据库,然后将中文数据插入到表中,最后读取表中所有数据并输出。
import mysql.connector
cnx = mysql.connector.connect(user='xxx', password='xxx',
host='127.0.0.1',
database='example',
charset='utf8')
cursor = cnx.cursor()
add_user = ("INSERT INTO `user`(`name`) VALUES (%s)")
data = [('张三',),('李四',),('王五',)]
cursor.executemany(add_user, data)
cnx.commit()
query = ("SELECT * FROM `user`")
cursor.execute(query)
for (id, name) in cursor:
print("id:{}, name:{}".format(id, name))
cursor.close()
cnx.close()
以上就是mysql中文乱码解决方法的完整攻略,通过设置mysql字符集和修改数据源配置,可以有效避免中文数据出现乱码问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 中文乱码 解决方法集锦 - Python技术站