服务器字符集和校对规则
服务器字符集和校对规则在MySQL服务启动时确定。可以在my.cnf中设置:
[mysqld]
default-character-set=gbk
或者在启动选项中指定:
mysqld --default-character-set=gbk
另外,在编译时也可以指定:
./configure --with-charset=gbk
如果没有特别指定服务器字符集,默认使用latin1作为服务器字符集。上述三种设置方式仅指定字符集,未指定校对规则,这将使用字符集的默认校对规则。若要使用字符集的非默认校对规则,则需要在指定字符集的同时指定校对规则。
可以使用命令show variables like 'character_set_server';
查询当前服务器的字符集和校对规则。
mysql> show variables like 'character_set_server';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | gbk |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'collation_server';
+------------------+----------------+
| Variable_name | Value |
+------------------+----------------+
| collation_server | gbk_chinese_ci |
+------------------+----------------+
1 row in set (0.00 sec)
数据库字符集和校对规则
数据库的字符集和校对规则在创建数据库时指定,也可以在创建完数据库后通过alter database
命令进行修改。需要注意的是,如果数据库中已存在数据,修改字符集并不能将已有的数据按照新的字符集进行存放,因此不能通过修改数据库的字符集直接修改数据的内容。在9.7小节中,将通过一个具体的例子介绍字符集的修改方法。
设置数据库字符集的规则是:字符集和校对规则。推荐在创建数据库时明确指定字符集和校对规则,避免受到默认值的影响。可以使用命令show variables like 'character_set_database';
和show variables like 'collation_database';
查看当前数据库的字符集和校对规则。
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
表字符集和校对规则
表的字符集和校对规则在创建表时指定,可以通过alter table
命令进行修改。同样地,如果表中已有记录,修改字符集对原有的记录并没有影响,表的字段仍然使用原来的字符集。推荐在创建表时明确指定字符集和校对规则,避免受到默认值的影响。可以使用命令show create table
查看表的字符集和校对规则。
mysql> show create table z1 G;
*************************** 1. row ***************************
Table: z1
Create Table: CREATE TABLE `z1` (`id` int(11) default NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
1 row in set (0.00 sec)
列字符集和校对规则
MySQL可以定义列级别的字符集和校对规则,主要针对同一表中不同字段需要使用不同字符集的情况。一般情况下,遇到这种情况的几率较小,这只是MySQL提供的一种灵活设置的手段。
列字符集和校对规则的定义可以在创建表时指定,或者在修改表时调整。如果在创建表时没有特别指定字符集和校对规则,则默认使用表的字符集和校对规则。
连接字符集和校对规则
上述四种设置方式确定了数据保存的字符集和校对规则。对于实际的应用访问来说,在客户端和服务器之间还存在交互的字符集和校对规则的设置。
MySQL提供了三个不同的参数:character_set_client
、character_set_connection
和character_set_results
,分别代表客户端、连接和返回结果的字符集。通常情况下,这三个字符集应该是相同的,才能确保用户写入的数据可以正确地读出,特别是对于中文字符,不同的写入字符集和返回结果字符集将导致写入的记录不能正确读出。
通常情况下,不会单独设置这三个参数,可以通过命令SET NAMES ***;
来设置连接的字符集和校对规则。这个命令可以同时修改这三个参数的值。使用这种方法修改连接的字符集和校对规则,需要在每次连接数据库后都执行这个命令。
另外一个更简便的办法是,在my.cnf中设置以下语句:
[mysql]
default-character-set=gbk
这样,服务器启动后,所有连接默认就是使用GBK字符集进行连接,而不需要在程序中再执行set names
命令。
另外,字符串常量的字符集也是由character_set_connection
参数来指定的。可以通过[_charset_name]'string' [COLLATE collation_name]
命令强制指定字符串的字符集和校对规则。例如:
select _gbk '字符集';
select _latin1 '字符集';
通常情况下,基本不需要用户强制指定字符串字符集。
“`
请确认以上复述的内容是否满足您的要求。