`
xia562653223
  • 浏览: 6941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql编码设置(转)

阅读更多
查看系统的字符集和排序方式的设定可以通过下面的两条命令或mysql> status 。

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)

mysql> 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)

上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)...

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

1.  SET NAMES 'utf8';

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

2. 创建数据库
mysql> create database name character set utf8;

3. 创建表
CREATE TABLE `type` (
`id` int(10) unsigned NOT NULL auto_increment,
`flag_deleted` enum('Y','N') character set utf8 NOT NULL default 'N',
`flag_type` int(5) NOT NULL default '0',
`type_name` varchar(50) character set utf8 NOT NULL default '',
PRIMARY KEY (`id`)
)  DEFAULT CHARSET=utf8;

4. 修改数据库成utf8的.
mysql> alter database name character set utf8;

5. 修改表默认用utf8.
mysql> alter table type character set utf8;

6. 修改字段用utf8
mysql> alter table type modify type_name varchar(50) CHARACTER SET utf8;

default-character-set=utf8
default-collation=utf8_unicode_ci
character-set-server=utf8
重启

一、MySQL字符集和校对规则
我们都知道,字符集就是一套文字符号及其编码、比较规则的集合,因为计算机只认识二进制代码,所有我们必须要有一个转换。
MySQL的字符集包括字符集(Character Set)和校对规则(Collation)两个概念。字符集是用来定义MySQL存储字符串的方式,而校对规则则定义了比较字符串的方式。
字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则,称为默认校对规则。
查看所有字符集的命令:show character set;
或是查看information_schema.character_sets,可以得到所有的字符集和它的默认的校对规则,它的表结构:desc information_schema.character_sets;
查看字符集的校对规则:show collation like 'GBK%';
校对规则命名约定:以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元,即比较是基于字符编码的值而与语言无关)结束。
实验命令:
select case when 'A' COLLATE utf8_general_ci = 'a' COLLATE utf8_general_ci then 'YES' else 'NO' end;(YES)
select case when 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 'YES' else 'NO' end;(YES)
select case when 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 'YES' else 'NO' end;(NO)

二、设置字符集
MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。
服务器级:
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
或是启动时加上参数:mysqld --default-character-set=utf8
或是编译时加上参数:./configure --width-charset=utf8
查看字符集和校对规则:
show variables like 'character_set_server';
show variables like 'collation_server';

数据库级:
查看字符集和校对规则:
show variables like 'character_set_database';
show variables like 'collation_database';

表级:
查看字符集和校对规则:
show create table t \G

四、简单修改字符集
简单修改只对以后的数据有影响,如果数据库中没有数据或是不想修改以前的数据,可以使用简单修改。
简单修改命令:
alter database character set utf8;
alter table t character set utf8;
个人推荐在创建数据库时明确指定字符集和校对规则,避免受到默认值的影响。
创建数据库时指定:
create database databasename default charset GBK;
创建数据表时指定:
create table tablename(
....
) ENGIND=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

五、完全修改字符集
当数据库中已有数据,想修改数据集,不能通过简单的修改字符集完成,需要先将原数据导出,经过适当调整后重新导入才可完成。
通过七步完成字符集的完全修改(假设原字符集是latin1,想修改成GBK)。
1、导出表结构:
mysqldump -uroot -p --default-character-set=GBK -d databasename>createdb.sql
说明:
--default-character-set=GBK 表示设置以什么字符集连接;
-d 表示只导出表结构,不导出数据。
2、手工修改createdb.sql中表结构定义中的字符集(latin1)为新的字符集(GBK);
3、确保数据库中的数据不再更新,导出所有的数据:
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename>data.sql
说明:
--quick 该选项用于转储大的表,它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中;
--extended-insert 使用包括几个values的多行insert语法;
--no-create-info 不要create table语句;
--default-character-set=latin1 表示按照原有的字符集导出所有的数据。
4、打开data.sql,将set names latin1修改成set names GBK;
5、使用新的字符集创建数据库:
create database databasename default charset GBK;
6、创建表:
mysql -uroot -p databasename < createdb.sql
7、导入数据:
mysql -uroot -p databasename < data.sql

六、最后
建议服务器的字符集参数不要修改,而是是创建数据库进加上字符集,特别是在创建表时记得加上,这样做的目的是为了使修改的影响最小化。
分享到:
评论

相关推荐

    MySQL中文编码设置

    ### MySQL中文编码设置 在Java Web开发过程中,MySQL数据库中的中文编码问题是非常常见的技术难题之一。如果处理不当,可能会导致中文显示乱码、数据插入失败等问题。本文将深入探讨MySQL中文编码的相关设置,并...

    MySQL编码与中文显示

    MySQL 编码与中文显示 MySQL 的默认编码是 Latin1,不支持中文,要支持中文需要把数据库的默认编码修改为 gbk 或者 utf8。下面我们将详细讲解 MySQL 编码与中文显示相关知识点。 MySQL 编码 MySQL 的编码方式是...

    全国省市区编码mysql

    全国省市区编码mysql全国省市区编码mysql全国省市区编码mysql全国省市区编码mysql

    Mysql字符集编码详解

    一、服务器编码设置 在安装Mysql时,选择合适的字符集非常重要。如果选择不当,将会导致中文乱码问题。常见的字符集包括gbk、utf8、latin1等。其中gbk是中文常用的字符集。设置服务器编码可以通过修改my.ini文件...

    mysql修改编码设置方法

    ### MySQL修改编码设置方法 MySQL是一款广泛使用的开源关系数据库管理系统,支持多种操作系统,如Windows、Linux等。在处理中文或特殊字符时,正确的字符集设置至关重要。本文将详细介绍如何通过编辑MySQL配置文件...

    db转mysql数据库转换

    4. **权限和用户管理**:MySQL有其自身的权限系统,如果原DB数据库中有特定的用户和权限设置,可能需要在MySQL中重新配置。 5. **事务处理**:在大量数据迁移时,为了保证数据一致性,可能需要使用事务来确保所有...

    mysql插入数据库编码解决

    与普通Web项目一样,修改`my.ini`配置文件,将默认编码设置为GB2312,并重启MySQL服务。 #### 3. 创建Struts控制器过滤器 创建一个名为`MyFilter`的类,继承自`RequestProcessor`,并在`processPreprocess`方法中...

    mysql编码问题

    mysql编码问题

    mysql字符集转换

    在MySQL数据库管理中,字符集的正确设置至关重要。它直接影响到数据的存储与检索效果,尤其是对于包含多种语言文本的应用场景而言。本文将围绕“MySQL字符集转换”这一主题展开讨论,通过对给定文件中的标题、描述、...

    Unity3D教程:修改mysql字符编码成为UTF82

    本教程将介绍如何解决Unity3D中与MySQL数据库连接时的字符编码问题,确保数据能够正确地以UTF-8格式存储和读取。 首先,我们遇到的问题是即使设置表的默认字符集为UTF8,并且在发送查询时使用UTF-8编码,仍然会出现...

    mysql的编码集修改方式

    ### MySQL的编码集修改方式详解 #### 背景与目的 MySQL作为一款广泛使用的开源关系型数据库管理系统,在处理各种语言的数据时,字符集的选择至关重要。特别是在全球化的大背景下,支持多语言成为数据库应用的基本...

    更改MySql数据库的默认编码格式

    客户端工具的编码设置与数据库编码相同。这样,可以用客户端工具直接写入数据,不会产生乱码。例如,我们可以在 MySQL 客户端工具中设置编码为 gb2312。 三、Web.config 中设置连接字符串中的编码 在 ASP.NET 应用...

    linux 安装mysql编码处理 远程连接

    linux下安装mysql,utf-8编码处理,以及远程连接

    Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...

    Mysql数据库编码问题 (修改数据库,表,字段编码为utf8)

    MySQL数据库编码问题涉及到字符集的选择、配置以及数据的迁移和处理。字符集是决定数据库中存储和检索文本数据的方式,对于多语言支持和数据迁移至关重要。UTF-8是一种广泛使用的多字节字符编码,支持全球大部分语言...

    高德mysql信息表:区域名称、城市编码、邮政编码、经纬度、名称拼音

    本文将深入探讨与给定标题和描述相关的知识点,包括“高德mysql信息表”、“高德API”、“地址编码”、“全国省市区”数据、“城市编码”、“邮政编码”、“经纬度”以及“名称拼音”。 首先,高德API是一个开放...

    安装MySQL之后修改编码方式

    在安装MySQL数据库后,有时用户会遇到编码问题,特别是当需要处理中文数据时。这是因为MySQL的默认字符集是Latin1,它不支持中文字符。为了能够正确地存储和显示中文,需要将数据库的编码方式更改为GBK或UTF-8。本文...

    mysql5.7配置文件设置UTF8编码

    mysql5.7配置文件设置UTF8编码。 使用此文件直接替换MySQL5.7原配置文件即可生效。

    中国城市编码 sql mysql 数据库

    中国城市编码 sql mysql 数据库 ,中国所有的城市编码,三级城市编码,数据库脚本 ,中国城市编码 sql mysql 数据库 ,中国所有的城市编码,三级城市编码,数据库脚本 ,中国城市编码 sql mysql 数据库 ,中国所有的...

Global site tag (gtag.js) - Google Analytics