做事器字符集和校正,在 MySQL 做事启动的时候确定。
可以在 my.cnf 中设置: [mysqld] default-character-set=gbk 或者在启动选项中指定: mysqld --default-character-set=gbk 或者在编译的时候指定: ./configure --with-charset=gbk
如果没有特殊的指定做事器字符集,默认利用 latin1 作为做事器字符集。上面 3 种设置的办法都只指定了字符集,没有指定校正规则,这样是利用该字符集默认的校正规则,如果要利用该字符集的非默认校正规则,则须要在指定字符集的同时指定校正规则。
可以用“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 供应给我们一个灵巧设置的手段。
列字符集和校正规则的定义可以在创建表时指定,或者在修正表时调度,如果在创建表的时候没有特殊指定字符集和校正规则,则默认利用表的字符集和校正规则。
连接字符集和校正规则
上面 4 种设置办法,确定的是数据保存的字符集和校正规则,对付实际的运用访问来说,还
存在客户端和做事器之间交互的字符集和校正规则的设置。
对付客户端和做事器的交互操作,MylSQL 供应了 3 个不同的参数:character_set_clientcharacter_set_connection 和 character_set_results,分别代表客户端、连接和返回结果的字符集,常日情形下,这 3 个字符集该当是相同的,才可以确保用户写入的数据可以精确地读出,特殊是对付中笔墨符,不同的写入字符集和返回结果字符集将导致写入的记录不能精确读出。 常日情形下,不会单个地设置这 3 个参数,可以通过以下命令:
SET NAMES ;
来设置连接的字符集和校正规则,这个命令可以同时修正这 3 个参数的值。利用这个方法修正连接的字符集和校正规则,须要运用每次连接数据库后都实行这个命令。其余一个更简便的办法,是在 my.cnf 中设置以下语句:
[mysql] default-character-set=gbk
这样做事器启动后,所有连接默认便是利用 GBK 字符集进行连接的,而不须要在程序中再实行 set names 命令。
其余,字符串常量的字符集也是由 character_set_connection 参数来指定的。
可以通过“[_charset_name]'string' [COLLATE collation_name]”命令逼迫字符串的字符集和校正规则。例如:
select _gbk '字符集'; select _latin1 '字符集';
常日情形下,基本不须要用户逼迫指定字符串字符集。
搜索微信"大众年夜众号:TestingStudio霍格沃兹的干货都很硬核