Mysql 在项目中应用注意事项
一、mysql字符集乱码的问题
(http://imysql.cn/charset_tips)建议,数据库字符集尽量使用utf8(HTML页面对应的是utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上可能无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.
1、分析涉及到的字符集
(1)安装数据库时的编码集
(2)创建数据库时的编码集
(3)排序时校验字符集
(4)connection连接层字符集
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
(3)c3p0配置文件的连接字符串设置(连接数据库的url中一定要指定编码类型)
jdbc:mysql://localhost:3306/test_charset?useUnicode=true&characterEncoding=UTF-8
(4)Hibernate方言的配置
<!-- <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
三、项目遇到异常的解决
1、No identifier specified for entity ....?
解决:实体bean中没有设置以下信息。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
2、Connections 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是一个功能强大且易于上手的数据库系统,无论是在个人项目还是企业级应用中,都有广泛的应用。通过了解其基本概念、安装过程和使用技巧,你可以有效地利用MySQL来存储和管理数据。在实际操作中,要...
- 在 Windows 系统下的安装和使用注意事项。 - **4.13 OS/2 注意事项** - 对于 OS/2 操作系统的特殊说明。 - **4.14 TcX 二进制代码** - 介绍了 TcX 分发的特点及其安装步骤。 - **4.15 安装后期 (post-...
### 在DELPHI中使用MyDAC连接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 使用 ...
在IntelliJ IDEA中创建项目并使用JDBC(Java Database Connectivity)连接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下从...
+ 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 邮件列表及如何提问或报告错误...
在本项目中,我们主要关注三个核心技术:JDBC(Java Database Connectivity)、MySQL数据库以及JSP(JavaServer Pages)。这是一个小型的Web应用,旨在通过JDBC接口与MySQL数据库交互,实现数据的增、删、改操作,而...
- **对于BCB**:在BCB项目中,你需要包含MySQL的头文件(如`mysql.h`)并链接相应的库文件。这通常涉及到在项目的“Options”>“Directories/Conditionals”中添加MySQL的`include`和`lib`目录。同时,在"Project ...
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 ...
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应用环境,使用的是64位服务器,并且有相当的数据量和高并发的处理需求。根据实际应用环境,优化工作可能需要考虑优化I/O操作、提高缓存利用率、使用高效的算法和数据...
在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 ...
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下从...
#### 注意事项 1. **导包问题**:确保正确导入所有必要的包。 2. **调试问题**:如果遇到异常,检查是否已正确配置Tomcat中的数据源。 - 在Eclipse的“Servers”视图中,展开Tomcat服务器节点,找到对应的数据源...
MySQL是一款广泛使用的开源关系型数据库管理系统,其便捷性、稳定性和高效性使其在全球范围内得到了广泛应用。在Java开发中,为了与MySQL数据库进行交互,通常会使用特定的驱动程序,也就是所谓的JDBC(Java ...
通过上述知识点,我们可以了解如何在VS2015中使用MFC和ADO技术连接并操作MySQL数据库。这个过程需要对Visual Studio环境、MFC以及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. 在...
6. 注意事项: - 版本兼容性:不同版本的MySQL JDBC驱动可能不兼容新版本的MySQL数据库,因此要确保驱动与数据库版本匹配。 - 错误处理:在尝试连接时,应该捕获并处理可能抛出的SQLException。 - 安全性:避免在...
这是本人上课过程中为学生讲解hibernate、spring和mysql开发简单项目的截图汇集,大家需要先自己完成数据库以及JDBC数据源的配置,之后按照该截图的顺序就能完成一个最简单的支持数据库事务处理的SH系统,(如果使用...