MySQL字符集问题
- 格式:doc
- 大小:107.00 KB
- 文档页数:7
一,测试软件:MySQL5 绿色版 Window 简体中文平台 Eclipse3.4 二,安装以及配置 两种方式:通过注册服务,开机自动运行或使用 CMD 启动 MySQL 1,添加服务(前提条件:已将$MySQL_HOME$/bin 添加至环境变量里): 注册服务:mysqld --install mysql5 --defaults-file=C:\MySQL5\my.ini (其中 mysql5 是服务名,my.ini 是配置文件,在绿色版打包文件里有) 启动服务:net start mysql5 (首次需要运行,以后就不用了) 停止服务:net stop mysql5 注销服务:mysqld --remove mysql5 2,通过 CMD 启动:mysqld --console (CMD 窗口不能关闭,否则停止监听端口;并且每次想连 MySQL 时就得运行这条命令) 正常关闭 MySQL:mysqladmin -uroot -pyourpassword shutdown 连接数据库:mysql -uroot -pyourpassword 三,字符集(使用中文常会出现乱码问题的根源) 1,原理说明 Mysql 服务器中有六个关键位置使用了字符集的概念:client,connection,database,results,server,system. a) 其中 client 客户端使用的字符集,相当於网页中的字符集设置如下:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> b) c) d) 其中 connection 是连接数据库的字符集设置类型,如果 JSP/PHP 没有指明连接数据库使用的字符集类型就按照服务器端的字符集设置. 其中 database 是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置. Results 数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集.
e) f)
server 是服务器安装时指定的默认字符集设定. system 是数据库系统使用的字符集设定.
而 MySQL 的默认字符集是 latin1 这一瑞典文字符集或(也称 ISO-8859-1) Java 里支持的字符集如下: Charset US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16 描述 7 位 ASCII 字符,也叫作 ISO646-US,Unicode 字符集的基本拉丁块 ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 8 位 UCS 转换格式 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识
2,下面说明如何配置字符集(个人推荐使用 utf-8): 个人推荐使用 utf-8,所以下面以设置成 utf-8 为例 (1)配置 MySQL 打包文档里的 my***.ini(里面有很多个,适用于不同的场合,文件里面的内容有介绍),复制一个命名为 my.ini 然后在文件内 容的末尾添加
[mysqld] # 设置mysql的安装目录 basedir=$MYSQL_HOME # 设置mysql数据库的数据的存放目录,必须是data,或者是[ datadir=$MYSQL_HOME\data # 设置mysql服务器的字符集 default-character-set=utf8 [client] # 设置mysql客户端的字符集 default-character-set=gbk
(2)然后,进 CMD:mysqld --install MySQL5 --defaults-file=[my.ini 的文件路径]\my.ini (3)然后,创建数据库:create database yourDB CHARACTER SET utf8; 这样,就配置完成了,如:
(2)已创建数据库,但字符集不是 utf-8(注意:在 MySQL 里,应该是 utf8) 3,通过数据导出与恢复配置字符集,示例: (1)mysqldump -uroot -pyourpassword --default-character-set=latin1 --set-charset=utf8 --opt yourdbname > newdatabase.sql (2) 修改 newdatabase.sql,在文件开头增加一条 sql 语句: "SET NAMES utf8; SET utf8;",保存.
(3)mysql -hlocalhost -uroot yourdbname < newdatabase.sql
4,常用的查看当前字符集状态命令: status SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation_%'; 5,常用的设置字符集的命令: mysql> mysql> mysql> mysql> mysql> SET SET SET SET SET character_set_client = utf8 ; character_set_connection = utf8 ; character_set_database = utf8 ; character_set_results = utf8 ; character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ; mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ; mysql> SET NAMES 'utf8'; 它相当于下面的三句指令: SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8; 四,Tomcat+Hibernate+Spring+Struts 的字符集配置
1,配置 MySQL 的字符集为 utf8 (见前面介绍); 2,所有的 JSP 页面使用"UTF-8" <%@ page contentType="text/html;charset=UTF-8" language="java"%> 3,配置连接 MySQL 的参数: jdbc:mysql://localhost:3306/yourdbname?useUnicode=true&characterEncoding=utf-8 4,通过 Spring 技术添加页面过滤器或配置所有页面的 request 与 response (1) 页面过滤器: 在 web.xml 添加 Filter
<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-cla <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter>
然后添加 Filter-Mapping: <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这样,就配置完成了页面过滤器. (2) 手动配置所有的 request 与 response: <% request.setCharacterEncoding("utf-8"); %> <% response.setContentType("text/html;charset=utf-8"); %> 至此所有的设置都已完成,可以打开 Tomcat 测试一下! 完成时间:2009 年 6 月 2 日 晚 22:31
。