MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。下面将分两部分,分别设置服务器编码和数据库、数据表与连接部分的编码,从而杜绝中文乱码的出现。
一 服务器编码设置
服务器编码设置方法有二:
一是安装mysql时,其中会有一个步骤选择编码方式,此时选择gbk即可。如果不选择,默认的编码是latin1;
二是在安装玩mysql之后,手动修改其配置文件,如下:
(1)修改 MySql安装目录下面的my.ini(MySQL Server Instance Configuration 文件)。 设置
default-character-set=gbk(注意,有2处)
(2)修改data目录中相应数据库目录下的db.opt配置文件
(2)修改data目录中相应数据库目录下的db.opt配置文件
default-character-set=gbk
default-collation=gbk_chinese_ci
重启数据库,关闭控制台窗口重新登录数据库即可。
二 数据库、数据表和连接部分的编码设置
2.1 设置数据库和数据表编码
要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码。如果没有指明,将是默认的latin1。
用得最多的应该是这3种字符集 gb2312,gbk,utf8。
如何去指定数据库和数据表的字符集呢?下面也gbk为例:
【在MySQL Command Line Client创建数据库 】
mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。
当然也可以通过如下指令修改数据库数据表的字符集:
alter database mysqlcode default character set 'gbk'.
前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。
用得最多的应该是这3种字符集 gb2312,gbk,utf8。
如何去指定数据库和数据表的字符集呢?下面也gbk为例:
【在MySQL Command Line Client创建数据库 】
mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。
当然也可以通过如下指令修改数据库数据表的字符集:
alter database mysqlcode default character set 'gbk'.
前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。
但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置
“连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作。如果不信
,你现在可以执行下面的sql文试一试:
mysql> insert into mysqlcode values(null,'java爱好者');
按回车,结果如下:
按回车,结果如下:
ERROR 1406 (22001): Data too long for column 'content' at row 1
2.2 设置连接编码
设置了服务器、数据库和数据表部分的编码,必须设置连接编码。连接编码设置如下:
mysql> SET character_set_client='gbk';
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
设置好连接编码,下面便可以成功插入中文了:
mysql> SET character_set_connection='gbk'
mysql> SET character_set_results='gbk'
设置好连接编码,下面便可以成功插入中文了:
mysql> insert into mysqlcode values(null,'java爱好者');
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
其实,上面设置连接编码的三条命令可以简化为一条:
mysql> set names 'gbk';
设置好了连接编码后,在select查询时,也能正确显示中文:
mysql> select * from mysqlcode;
+----+-----------+
| id | content |
+----+-----------+
| 1 | java爱好着 |
+----+-----------+
1 row in set (0.00 sec)
+----+-----------+
| id | content |
+----+-----------+
| 1 | java爱好着 |
+----+-----------+
1 row in set (0.00 sec)
三 完整示例
下面将用一个例子完整地将上面的理论演示一遍,最后达到能向mysql中插入中文的目的:
3.1 设置mysql服务器编码
这一步请参见上文第一节,主要就是在安装mysql之后,修改my.ini和dataTable.db中的编码为gbk
3.2 创建一个数据库
先连接到本地数据库:mysql -h localhost -u root -proot,接着创建一个数据库:
mysql> create database test;
3.3 创建数据表并设置其编码
-- 中文编码测试数据表
use test
DROP TABLE IF EXISTS `test`.`test_nml`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = gbk;
CREATE TABLE `test`.`test_nml` (
`id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` VARCHAR( 255 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户基本信息';
SET character_set_client = @saved_cs_client;
DROP TABLE IF EXISTS `test`.`test_nml`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = gbk;
CREATE TABLE `test`.`test_nml` (
`id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` VARCHAR( 255 ) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户基本信息';
SET character_set_client = @saved_cs_client;
这里的红色部分等价于上文中的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
3.4 插入中文数据
--插入数据
SET @saved_cs_client = @@character_set_client;
set names gbk;
insert into test_nml values(null,'我是中文');
SET @saved_cs_client = @@character_set_client;
set names gbk;
insert into test_nml values(null,'我是中文');
注意:每次执行insert或update或select连接操作时,都必须设置编码,即在前面加上:set names 'gbk';
相关推荐
### MySQL 插入中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在使用 MySQL 数据库处理中文数据时,经常会遇到一个让人头疼的问题——中文乱码。中文乱码不仅影响用户体验,还可能导致数据丢失或者错误...
### Java插入MySQL中文乱码解决 #### 一、问题背景 在使用Java应用程序与MySQL数据库交互的过程中,常常会遇到一个令人头疼的问题:中文字符在存储到数据库时出现乱码现象。这种现象通常发生在使用JDBC(Java ...
**解决方案:** 1. **服务器层面**:修改`my.cnf`,添加或修改`[mysqld]`下配置: ``` character-set-server=utf8 collation-server=utf8_general_ci ``` 2. **客户端连接**:使用MySQL命令行或第三方工具时,...
解决mysql中文表示乱码问题,如:不能正确显示中文,不能有效的输入中文,使用sql语句插入中文数据出错。这里全部有收录
MySql 数据库导入乱码解决方案 在使用 PHPmyadmin 导出 MySql 数据库时,经常会遇到中文乱码的问题,这是因为数据库的字符集编码问题。中文网站使用的字符集编码一般是 gb2312、gbk、utf8 等三种,而 PHPmyadmin 的...
### 解决方案详解 #### 步骤一:定位my.cnf配置文件 首先,需要找到或创建MySQL的配置文件my.cnf。在macOS中,可以通过拷贝/usr/local/mysql/support-files目录下的任意一个*.cnf文件至/etc目录下,并重命名为my....
### MySQL 插入记录防止乱码的全面解析与解决方案 #### 背景与问题概述 在使用MySQL数据库的过程中,特别是在处理中文等非ASCII字符时,可能会遇到数据插入后显示为乱码的情况。这种情况不仅影响数据的正确读取,...
sqlite数据库存取中文乱码的全部解决方案(包括其它数据库oracle+sqlserver+mysql) 数据库的连接方式、数据库里存放数据的字体编码、所选编程语言的缺省字体编码。如果在编程中遇到不能正确显示中文时、、、、
本文将详细介绍解决Mysql5.0数据库中文乱码的万能方法,帮助你顺利处理这一常见问题。 1. **安装时设置编码** 在安装MySQL时,确保选择支持UTF-8编码的配置。UTF-8是一种广泛使用的多字节字符集,能支持大部分世界...
### Java插入数据乱码解决集锦 #### 一、Java中文问题的由来及核心问题解析 Java作为一种广泛使用的编程语言,在处理中文等多语言文本时可能会遇到字符编码不匹配导致的乱码问题。这些问题主要源于Java程序在不同...
这个问题的解决方案涉及多个层面,包括MySQL服务器配置、数据库、表以及字段的字符集设定。以下是最简单且有效的解决方法: 首先,我们需要理解MySQL中的字符集概念。字符集(Character Set)决定了数据库如何存储...
总结一下,解决JSP MySQL插入数据时中文乱码的问题,可以采取以下步骤: 1. 使用SQL命令临时更改字符集: ```sql SET NAMES gbk; ``` 这个命令会更改当前会话的字符集为GBK,适用于临时会话。 2. 修改MySQL...
本文将深入探讨PHP与MySQL在处理中文字符时可能出现的乱码问题,并提供一系列全面的解决方案。 首先,我们需要了解编码的基础知识。常见的中文编码有GBK、GB2312和UTF-8。GBK是GB2312的扩展,包含了更多的汉字。UTF...
### MySQL乱码问题解决方案 在处理数据库操作时,字符集编码问题经常会导致数据展示或存储过程中出现乱码现象。MySQL作为广泛使用的开源关系型数据库管理系统之一,在实际应用中也难免会遇到字符集不匹配导致的数据...
**2.1 MySQL Command Line Client下的乱码解决方案** - **步骤一:修改表定义中的字符集** 在生成的.sql文件中,找到表定义部分,并添加`DEFAULT CHARSET=gb2312`,例如: ```sql CREATE TABLE `userinfo` ( `...
### 快速进行Access数据库转成MySQL数据库及MySQL导入中文数据乱码问题的解决方案 #### 一、使用Access-to-mysql Pro进行Access数据库到MySQL数据库的转换 **Access-to-mysql Pro**是一款专用于将Microsoft Access...