MySQL字符集

shxeyjj

shxeyjj

2016-02-19 16:39

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是MySQL字符集,一起来学习了解下吧!

  MySQL的字符集支持(Character Set Support)有两个方面:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  字符集(Character set)和排序方式(Collation)。

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  1.MySQL的默认字符集

  MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

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

  (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.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)

  通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:

   mysqlSHOWVARIABLESLIKE'character%';
  +--------------------------+---------------------------------+
  |Variable_name|Value|
  +--------------------------+---------------------------------+
  |character_set_client|latin1|
  |character_set_connection|latin1|
  |character_set_database|latin1|
  |character_set_filesystem|binary|
  |character_set_results|latin1|
  |character_set_server|latin1|
  |character_set_system|utf8|
  |character_sets_dir|D:"mysql-5.0.37"share"charsets"|
  +--------------------------+---------------------------------+
  mysqlSHOWVARIABLESLIKE'collation_%';
  +----------------------+-----------------+
  |Variable_name|Value|
  +----------------------+-----------------+
  |collation_connection|utf8_general_ci|
  |collation_database|utf8_general_ci|
  |collation_server|utf8_general_ci|
  +----------------------+-----------------+

  3.修改默认字符集

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

  如 default-character-set = utf8 

   character_set_server=utf8

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

  使用 mysql SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8 

   +--------------------------+---------------------------------+
  |Variable_name|Value|
  +--------------------------+---------------------------------+
  |character_set_client|utf8|
  |character_set_connection|utf8|
  |character_set_database|utf8|
  |character_set_filesystem|binary|
  |character_set_results|utf8|
  |character_set_server|utf8|
  |character_set_system|utf8|
  |character_sets_dir|D:"mysql-5.0.37"share"charsets"|
  +--------------------------+---------------------------------+

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

   mysqlSETcharacter_set_client=utf8;
  mysqlSETcharacter_set_connection=utf8;
  mysqlSETcharacter_set_database=utf8;
  mysqlSETcharacter_set_results=utf8;
  mysqlSETcharacter_set_server=utf8;
  mysqlSETcollation_connection=utf8;
  mysqlSETcollation_database=utf8;
  mysqlSETcollation_server=utf8;

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

  SETNAMES'utf8';

  它相当于下面的三句指令:

   SETcharacter_set_client=utf8;
  SETcharacter_set_results=utf8;
  SETcharacter_set_connection=utf8;

  总结:

  因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

  1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)。

  2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式。

展开更多 50%)
分享

猜你喜欢

MySQL字符集

编程语言 网络编程
MySQL字符集

小谈MySQL字符集

编程语言 网络编程
小谈MySQL字符集

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

mysql 字符集的系统变量说明

编程语言 网络编程
mysql 字符集的系统变量说明

MySQL 4.1 字符集支持的原理

MySQL mysql数据库
MySQL 4.1 字符集支持的原理

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

HTML 字符集

Web开发
HTML 字符集

MySQL 存储过程的字符集问题

编程语言 网络编程
MySQL 存储过程的字符集问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

If-Trader 订单流程系统

If-Trader 订单流程系统

OfficeXP menu class(OOP版)

OfficeXP menu class(OOP版)
下拉加载更多内容 ↓