mysql在linux下乱码问题
来源:互联网 发布:labview编程 编辑:程序博客网 时间:2024/06/08 00:17
一、操作
mysql默认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改mysql的字符集了。
1、查看默认编码
showvariables like 'character%';
+--------------------------+----------------------------+
|Variable_name | Value |
+--------------------------+----------------------------+
|character_set_client | latin1 |
|character_set_connection | latin1 |
|character_set_database | latin1 |
|character_set_filesystem | binary |
|character_set_results | latin1 |
|character_set_server | latin1 |
|character_set_system | utf8 |
|character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Mysql下默认的编码是latin1
2、查看默认排序方式
showvariables like 'collation_%';
+----------------------+-----------------+
|Variable_name | Value |
+----------------------+-----------------+
|collation_connection | latin1_swedish_ci |
|collation_database | latin1_swedish_ci |
|collation_server | latin1_swedish_ci |
+----------------------+-----------------+
3、通过show variables like 'character%', 我们看到有很多变量,但是那些是我们需要修改的或者说在从客户端请求到数据库服务返回数据都经过了那些步骤:
(1)、从请求到返回数据的流程:
1)mysql Server收到请求时将请求数据从character_set_client转换为character_set_connection
2)进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,步骤如下:
A.使用每个数据字段的CHARACTER SET设定值;
B.若上述值不存在,则使用对应数据表的字符集设定值
C.若上述值不存在,则使用对应数据库的字符集设定值;
D.若上述值不存在,则使用character_set_server设定值。
3)最后将操作结果从内部操作字符集转换为character_set_results
(2)、从请求到返回数据的整个流程图:
总结: 从上面的流程我们看到从请求到返回结果集进行了多次转化而如果某两个转化之间的编码不同的话都会出现乱码,所以在整个流程中涉及到的都要设置需要的编码而且要一致。
4、修改默认字符集
修改文件/etc/my.cnf内容
在[client]下添加如下语句
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
init_connect='SET NAMES utf8' ##设定连接mysql是使用UTF8编码
修改好后,重启mysql服务即可
5、另外一种修改字符编码方法
登录mysql后,输入如下内容
mysql>SET character_set_client = utf8 ;
mysql>SET character_set_connection = utf8 ;
mysql>SET character_set_database = utf8 ;
mysql>SET character_set_results = utf8 ;
mysql>SET character_set_server = utf8 ;
mysql>SET collation_connection = utf8 ;
mysql>SET collation_database = utf8 ;
mysql>SET collation_server = utf8 ;
6、重新查看
showvariables like 'character%';
+--------------------------+---------------------------------+
|Variable_name | Value |
+--------------------------+---------------------------------+
|character_set_client | utf8 |
|character_set_connection | utf8 |
|character_set_database | utf8 |
|character_set_filesystem | binary |
|character_set_results | utf8 |
|character_set_server | utf8 |
|character_set_system | utf8 |
|character_sets_dir |/usr/share/mysql/charsets/|
+--------------------------+---------------------------------+
showvariables like 'collation_%';
+----------------------+-----------------+
|Variable_name | Value |
+----------------------+-----------------+
|collation_connection | utf8_general_ci |
|collation_database | utf8_general_ci |
|collation_server | utf8_general_ci |
+----------------------+-----------------+
6)使用JDBC连接mysql时需要将连接字符串改为如下方式:
jdbc:mysql://localhost/mysql?useUnicode=true&characterEncoding=UTF-8
已utf8的方式连接
二、概念
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。
character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。
character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。
统一设置字符集编码使用语句:set names utf8
三、导入导出防止乱码
1.导出数据库使用命令(在cmd下输入)
mysqldump -u用户名 -p密码 -h服务器地址数据库名称 --default-character-set=utf8 --hex-blob >导出数据库.sql
--default-character-set=utf8代表使用urf8编码导出数据
--hex-blob代表以16进制导出数据库
2.导入数据库使用命令(在cmd下输入)
mysql -u用户名 -p密码 -h服务器地址数据库名称 --default-character-set=utf8--hex-blob <导出数据库.sql
除了使用上面的命令导入数据库外,还可以登录mysql,使用source命令导入
mysql> source导出数据库.sql
注意:blob字段存放的是二进制数据,故其没有字符集编码,在window和linux使用以上方式还是会有乱码的问题,故建议将blob类型修改为text类型,才不会出现乱码。blob类型数据往text类型转换,自己写一个简单的代码,从blob读出数据以字符串的形式存到text字段即可。
- mysql在linux下乱码问题
- MySQL数据库乱码-Linux下乱码问题
- mysql在dos下的乱码问题
- mysql在linux下的乱码问题解决
- 在Ubuntu/Linux环境下使用MySQL:解决在Linux环境下MySQL中文乱码的问题
- mysql linux下的乱码问题
- linux 下mysql中的乱码问题
- linux下mysql中文乱码问题
- Linux下mysql 中文 乱码 问题
- Linux下mysql中文乱码问题
- linux下mysql中文乱码问题
- linux下Mysql乱码问题的处理
- Linux下解决mysql中文乱码问题
- Linux下mysql中文乱码问题
- Linux系统下mysql中文乱码问题
- Linux下mysql中文乱码问题
- Linux下mysql中文乱码问题
- Linux下的mysql乱码问题
- 万万没想到(2) 南邮NOJ2058
- poj 1001
- 使用VLC和live555MediaServer搭建RTSP服务器
- 关于.net framework4.0以及4.5安装失败,“安装时发生严重错误”……
- php开发之cookie
- mysql在linux下乱码问题
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)
- linux环境下mysql 大小写敏感解决办法
- The Clean Architecture
- 电子标签芯片的组成及功能
- Firefox火狐Flash插件卡死问题完美解决方法
- Wildcard Matching
- django 启动时提示环境变量有问题 未设置 找不到
- Android 开发中的若干安全问题