MYSQL教程:MYSQL字符集支持
来源:asp之家 发布时间:2009-02-27 15:55:00
MySQL4.1以前版本服务器只能使用单一字符集,从MySQL4.1版本开始,不仅服务器能够使用多种字符集,而且在服务器、数据库、数据表、数据列以及字符串常数多个级别上设置不同的字符集。
1.4.1. MySQL4.1以前版本
MySQL4.1以前版本的字符集由服务器默认指定,默认值是编译系统时指定的字符集,该字符集也可通过在启动服务器时指定--default-character-set来修改。这种修改会对数据表的索引造成影响,因为索引的顺序是和字符集有关的,修改字符集会使这个已排序的顺序产生错误。要解决该问题,我们要用修改后的字符集的排序顺序重建表的索引。重建索引有以下几种方法:
用mysqldump导出数据,再清除表里的内容,最后用导出文件重新导入。数据表的索引将在导入数时重建。该方法适用于所有数据表类型。
删除索引,然后重建。用alter table命令或drop index和create index命令来完成。该方法也适用于所有数据表类型。但该方法需要我们了解重建索引的精确定义。
MyISAM数据表的索引可以用myisamchk程序的--recover和--quick选项加上一个用来设定新字符集的--set-character-set选项进行重建。还可以用mysqlcheck程序的--repair和--quick选项或者一个带QUICK选项的REPLACE TABLE语句来重建索引,这种方式较方便。
1.4.2. MySQL4.1以后版本
MySQL4.1以后的版本对字符集的支持好了很多,具有以下新增功能:
支持服务器同时使用多种字符集。
允许在服务器,数据库,数据表,数据列等多级别上设置不同的字符集。
服务器的默认字符集在编译时选定,但可在启动服务器时用--default-character-set选项来更改。
用ALTER DATABASE db_name DEFAULT CHARACTER SET charset来设置数据库字符集。 如果只有default参数,则使用服务器的字符集。
用CREATE TABLE table_name(...) CHARACTER SET = charset设置数据表字符集。如果charset为default,则使用数据表所在数据库的字符集作为数据表的字符集。
在数据列中,可用CHARACTER SET charset属性来设置数据列的字符集。charset不能是default,如果没有该属性,则默认使用数据表的字符集。允许设置字符集的数据列有char,varchar(不带binary属性)及TEXT类型。
用_charset str转换字符串常数的字符集。如:_utf8 'mysql',_latinl 'oracle'。该方法只适用于括在引号内的字符串,其它十六进制常数 、字符串表达式等可用CONVERT()函数进行转换,如:SELECT CONVERT( str USING charset)。
通过MySQL提供的函数可进行字符集转换和查询。
新增的COLLATE操作符使我们可按某一种字符集的排序顺序来处理另一种字符集的数据。如:SELECT a from t ORDER BY a COLLATE utf-8;
用SHOW CHARACTER SET命令可显示服务器支持的字符集列表。
当服务器转换到另一种字符集时,会自动对索引进行重新排序。
通过UTF-8和UCS2字符集提供了Unicode支持。
MySQL现在还不支持:1,在同一个字符串里混用不同字符集的字符;2,在同一个数据列里混用不同的字符集。
1.4.3. 各级字符集的查询方法
服务器级
SHOW CHARACTER SET;可查出可供使用的所有字符集。
SHOW VARIABLES LIKE 'character_set';可查出服务器的默认字符集。
可查出数据库级的字符集。
SHOW CREATE DATABASE db_name;
两条命令可查出数据表的字符集。
SHOW CREATE TABLE table_name;
SHOW TABLE STATUS LIKE 'table_name'
以下几命令可查出数据列的字符集:
DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
SHOW CREATE TABLE table_name;
用CHARSET()函数可确定特定字符串,字符串表达式或数据列值相关联的字符串的字符集。如:SELECT CHARSET(str)。
1.4.4. Unicode支持
MySQL提供两种字符集来支持Unicode。一个是UTF-8,一种可变长的编码格式,需用1至4个字节来表示一个字符;另一个是UCS2,该字符集中的每个字符需要用两个字节来表示。


猜你喜欢
- 需要实现的效果是: 固定放大两倍,鼠标进入到左侧图片区域的时候,遮罩层显示,离开时,遮罩层隐藏。 css中的cursorhttps
- 代码: <?php $page=$_GET['page']; include($page.'php')
- <input name="a" type="checkbox"
- 前面是分部讲解,完整代码在最后。导入模块 :import osfrom shutil import copy, rmtreeimport r
- abs()返回一个数字的绝对值,它的参数可以是整数或者浮点数。举个例子:all()参数为一个可迭代对象,如果该可迭代对象所有元素的真值都为T
- 本文实例为大家分享了Python实现24点小游戏的具体代码,供大家参考,具体内容如下玩法:通过加减乘除操作,小学生都没问题的。源码分享:im
- 本文实例为大家分享了JavaScript实现贪吃蛇的具体代码,供大家参考,具体内容如下首先我们要确定贪吃蛇应有的功能1.通过键盘的上下左右控
- 利用seek监控文件内容,并打印出变化内容:#/usr/bin/env python#-*- coding=utf-8 -*-pos = 0
- msgpackMessagePack是一种高效的二进制序列化格式。它允许你在多种语言(如JSON)之间交换数据。但它更快更小。golang
- 本文实例讲述了Python图像处理之直线和曲线的拟合与绘制。分享给大家供大家参考,具体如下:在数据处理和绘图中,我们通常会遇到直线或曲线的拟
- #!/usr/bin/env python3# -*- coding: utf-8 -*-# File Name : gt1.py# Pur
- 在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下:python [-bBdEhiIOqsSuvV
- PHP levenshtein() 函数实例计算两个字符串之间的 Levenshtein 距离:<?php echo levensht
- 本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下:defer 在声明时不会立即执行,而是在函数 return
- 创建之前项目之前 记得改一下 maven 提高下载Pom速度 记得 setting 中
- [1]定义:正则又叫规则或模式,是一个强大的字符串匹配工具,在javascript中是一个对象[2]特性:[2.1]贪婪性,匹配最长的[2.
- 我们也可以来做一个,但这个“定时器”的工作时间范围应控制在1个小时至100 毫秒之间: <%sub StartTi
- 最近一个vue和element的项目中遇到了一个问题: 动态生成的对象进行双向绑定是失败直接贴代码: <el-form :model=
- 本文实例分析了AJAX使用get与post模式的区别。分享给大家供大家参考。具体分析如下:如果是get 模式的请求,则将传递参数通过URL
- 1、ThreadPoolExecutor多线程<1>为什么需要线程池呢?对于io密集型,提高执行的效率。线程的创建是需要消耗系统