MySQL字符集小结


Mysql对字符集支持有两个方面:

字符集(characterset)和排序方式(collation

对于字符集的支持细化到四个层次:

服务器(server),数据库(database),数据表(table)和连接(connection)

但是,传统的程序在创建数据库和数据表时,并没有使用那么复杂的配置,他们使用的是默认的配置,那么,默认的配置从何而来呢?

(1)编译mysql时,指定了一个默认的字符集,这个字符集是latin1;

(2)安装mysql时,可以在配置文件(my.ini)中指定一个默认的字符集,如果没指定,这个值继承自编译时指定的;

(3)启动mysqld时,可以在命令行参数中指定一个默认的字符集,如果没有指定,这个值继承自配置文件中的配置,此时character_set_server被设定为这个默认的字符集;

(4)创建一个新的数据库时,除非明确指定,否则这个数据库的字符集被缺省设定为character_set_server

(5)当选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;

(6)在这个数据库中创建一张时,表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;

(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;


如果什么地方都不修改,那么所有的数据库的所有表的所有栏位都用latin1存储,不过我们如果安装mysql,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把default_character_set设置为UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位都是用的UTF-8存储。


2.查看默认字符集,默认情况下,mysqld的字符集是latin1(ISO_8859_1)

showvariables like '%character%'



3.修改默认字符集

(1)最简单的修改方法,就是修改mysqlmy.ini文件中的字符集键值:

如果default-character-set= utf8

character_set_server= utf8

修改完以后,重启mysql的服务,servicemysql restart


(2)还有一种修改字符集的方法,就是使用mysql的命令:

setcharacter_set_client= utf8

setcharacter_set_connection = utf8

setcharacter_set_database = utf8

setcharacter_set_database = utf8

setcharacter_set_server = utf8

setcollation_connection = utf8

setcollation_database = utf8

setcollation_server = utf8

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

setnames 'utf8';这相当于下面的三句指令:

setcharacter_set_client = utf8

setcharacter_set_results = utf8

setcharacter_set_connection = utf8


你可能感兴趣的:(mysql)