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,在同一个数据列里混用不同的字符集。
各级字符集的查询方法
- 服务器级
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)。