`
aumy2008
  • 浏览: 117997 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mysql 在项目中应用注意事项

阅读更多

Mysql 在项目中应用注意事项

 

一、mysql字符集乱码的问题

(http://imysql.cn/charset_tips)建议,数据库字符集尽量使用utf8(HTML页面对应的是utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上可能无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.

 

1、分析涉及到的字符集

    1)安装数据库时的编码集

    2)创建数据库时的编码集

    3排序时校验字符集

    4connection连接层字符集

2默认的配置从何而来呢?(http://linux.chinaunix.net/bbs/archiver/tid-943550.html

编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1

安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;

此时 character_set_server 被设定为这个默认的字符集;

当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server

当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;

在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的。

简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

3、分析乱码出现的环节以及给与解决

 

二、示例

1、新建数据库表情形

1.创建数据库

CREATE DATABASE IF NOT EXISTS test_charset default charset utf8 COLLATE utf8_general_ci;

#注意后面这句话 "COLLATE utf8_general_ci",大致意思是在排序时根据utf8校验集来排序
#
那么在这个数据库下创建的所有数据表的默认字符集都会是utf8

2)创建数据表

create table test_bean(

       id int(11) NOT NULL auto_increment,

       name varchar(100),

       PRIMARY KEY  (id)

 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#这句话就是创建一个表了,制定默认字符集为utf8

       3c3p0配置文件的连接字符串设置(连接数据库的url中一定要指定编码类型

       jdbc:mysql://localhost:3306/test_charset?useUnicode=true&characterEncoding=UTF-8

       4Hibernate方言的配置

    <!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> -->

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>

<!-- <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLMyISAMDialect </prop> -->

       5)、客户端命令行显示的设置

       客户端使用默认设置和使用“SET NAMES 'utf8';”后,都显示乱码;使用 SET NAMES 'gb2312'; 显示正常。

    每次登录客户端的数据库,都要执行,否则还是乱码。

 

       注意:1-4步骤按照上述设置后,java应用可以显示正常,按照5设置后,命令行控制台显示正常。

 

2、现存数据库表的情形

 

1:旧数据升级办法
以原来的字符集为latin1为例,升级成为utf8的字符集。原来的表: old_table (default charset=latin1),新表:new_table(default charset=utf8)
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql
第二步:转换编码(类似unix/linux环境下)
iconv -t utf-8 -f gb2312 -c old.sql > new.sql
或者可以去掉 -f 参数,让iconv自动判断原来的字符集
iconv -t utf-8 -c old.sql > new.sql
在这里,假定原来的数据默认是gb2312编码。
第三步:导入
修改old.sql,在插入/更新语句开始之前,增加一条sql语句:

"SET NAMES utf8;"

,保存。
mysql -hlocalhost -uroot my_db < new.sql
大功告成!!

 

 

 

 

修改字段的编码:

ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

 

资料引用:http://www.knowsky.com/344632.html

 

 

 

三、项目遇到异常的解决

1No identifier specified for entity  ....

解决:实体bean中没有设置以下信息。

    @Id 

    @GeneratedValue(strategy = GenerationType.IDENTITY)  

 

2Connections could not be acquired from the underlying database!

解决:(参考laoer的配置)

c3p0配置文件的连接字符串设置(连接数据库的url中一定要指定编码类型

       jdbc:mysql://localhost:3306/test_charset?useUnicode=true&characterEncoding=UTF-8

同时Hibernate方言的配置

   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>

 

四、附录:查看mysql数据库字符集

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

SHOW VARIABLES LIKE 'character_set_%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | latin1 |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

7 rows in set (0.00 sec)

SHOW VARIABLES LIKE 'collation_%';

+----------------------+-------------------+

| Variable_name | Value |

+----------------------+-------------------+

| collation_connection | latin1_swedish_ci |

| collation_database | latin1_swedish_ci |

| collation_server | latin1_swedish_ci |

+----------------------+-------------------+

3 rows in set (0.00 sec)

上面列出的值就是系统的默认值。

SET NAMES 'gb2312';

设置客户端相关字符集

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

 

参阅网址:

http://imysql.cn/charset_tips

http://linux.chinaunix.net/bbs/archiver/tid-943550.html

 

分享到:
评论

相关推荐

    MySQL中文参考手册.chm

    4.9 MIT-pthreads 注意事项 4.10 Perl 安装说明 4.10.1 在Unix操作系统上安装 Perl 4.10.2 在 Win32上安装 ActiveState Perl 4.10.3 在 Win32 上安装 MySQL Perl 分发 4.10.4 使用 ...

    MYSQL到ORACLE程序迁移的注意事项

    有很多应用项目,刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多, 数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到 ORACLE的需求,应用程序也...

    MySQL 5.1中文手冊

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    MySQL中文参考手册

    + 1.2.1 本手册中使用的约定 o 1.3 MySQL的历史 o 1.4 MySQL的主要特征 o 1.5 MySQL稳定性? o 1.6 顺应2000年 o 1.7 SQL一般信息和教程 o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误...

    MYSQL

    4.9 MIT-pthreads 注意事项 4.10 Perl 安装说明 4.10.1 在Unix操作系统上安装 Perl 4.10.2 在 Win32上安装 ActiveState Perl 4.10.3 在 Win32 上安装 MySQL Perl 分发 4.10.4 使用 Perl ...

    MySql 5.1 参考手册.chm

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    mysql5.1中文手册

    在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 ...

    MySQL 5.1官方简体中文参考手册

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    MySQL 5.1参考手册

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在...

    Hibernate Spring MySQL项目配置图解

    这是本人上课过程中为学生讲解hibernate、spring和mysql开发简单项目的截图汇集,大家需要先自己完成数据库以及JDBC数据源的配置,之后按照该截图的顺序就能完成一个最简单的支持数据库事务处理的SH系统,(如果使用...

    MYSQL中文手册

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在...

    mysql官方中文参考手册

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    MySQL 5.1参考手册中文版

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在...

    MySQL 5.1参考手册 (中文版)

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    javaweb项目 项目源码 Mysql版本报价管理系统

    内附报价管理系统安装说明、系统部分截图以及注意事项 1.了解报价管理系统的基本需求 2.学会如何分析和设计数据库 3.学会数据库的基本使用 4.学会如何使用Struts2+JPA+Spring进行开发 报价管理系统可以分为五个功能...

    基于SpringBoot+Thymeleaf的招聘系统,数据库为MySQL+Druid+MyBatis,搭配Redis内存数据库

    3、MySQL版本注意事项 项目基于 MySQL 8.0.20 版本进行开发,若为MySQL 8.0 以前版本,请注意 Pom.xml 文件中数据库驱动版本,并修改 application.yml 文件中的 spring.datasource.url 属性,并注意时区的设定。 4...

    ssm+mysql开发的网盘系统

    项目描述 在学校期间做的一个仿百度云盘系统,使用ssm+mysql,数据库连接在db.properties中 运行环境 jdk8+tomcat8+mysql+eclipse+maven 项目技术(必填) spring+spring mvc+mybatis+jsp+js 启动成功 ...

    MySQL5.1参考手册官方简体中文版

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

Global site tag (gtag.js) - Google Analytics