mysql数据库编码字符集

介绍

不同的编码格式会导致同一字符,在不同字符集下的编码会不同。同样同一编码在不同的字符集中代码的字符也不相同。当你的MySQL返回的字符串的编码格式(字符集)与你的客户工具程序使用的字符集不同时,就会造成乱码。

MySQL中默认字符集的设置有四级:服务器级,数据库级,表级 。最终是字段级 的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。

MySQL中默认字符集的设置有四级:服务器级别 > 数据库级别 > 表级别 > 列级别。如果后者没有显示指定字符集,那么将采用前者的字符集。

MySQL默认字符集  

 MySQL对于字符集的指定可以细化到一个数据库,一张表,一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置.

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

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

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

Server

1查看数据库的编码方式命令

mysql> show variables like ‘character%‘;
+--------------------------+----------------------------+
| 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

其中

- character_set_client              客户端来源数据使用的字符集编码;
- character_set_connection          为建立连接使用的编码(从客户端接收到数据,然后传输的字符集);
- character_set_database            默认数据库的字符集编码;
- character_set_filesystem          把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
- character_set_results             查询结果字符集编码;
- character_set_server              数据库服务器的默认字符集编码;
- character_set_system              系统元数据(字段名等)字符集,是为存储系统元数据的字符集;

2、另一组查看数据库编码的命令

mysql> show variables like ‘collation%‘;
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_bin        |
+----------------------+-----------------+
3 rows in set (0.00 sec)

其中

- COLLATION_CONNECTION          当前连接的校对
- COLLATION_DATABASE            当前日期的默认校对。每次使用USE语句来“跳转”到另一个数据库时,这个变量就会改变。
- COLLATION_SERVER              服务器默认校对

Database

1、查看某数据库的字符集

方法:show create database DatabaseName;

mysql> show create database zjtravel;
+----------+-------------------------------------------------------------------+
| Database | Create Database                                                   |
+----------+-------------------------------------------------------------------+
| zjtravel | CREATE DATABASE `zjtravel` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

Table

1、数据库表的字符集设置

方法:show create table TableName;

显示一:
mysql> show create table destination;
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table       | Create Table   |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| destination | CREATE TABLE `destination` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `pid` int(10) NOT NULL DEFAULT ‘0‘,
  `name` varchar(20) NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8                         |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
显示二:
mysql> show create table destination \G
*************************** 1. row ***************************
       Table: destination
Create Table: CREATE TABLE `destination` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `pid` int(10) NOT NULL DEFAULT ‘0‘,
  `name` varchar(20) NOT NULL,
  `subarea` varchar(1000) DEFAULT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

column

1、数据库表中字段的字符集设置

显示一:
mysql> show full columns from destination;
+------------+---------------+-----------------+------+-----+---------------------+-----------------------------+---------------------------------+--------------------+
| Field      | Type          | Collation       | Null | Key | Default             | Extra                       | Privileges                      | Comment            |
+------------+---------------+-----------------+------+-----+---------------------+-----------------------------+---------------------------------+--------------------+
| id         | int(10)       | NULL            | NO   | PRI | NULL                | auto_increment              | select,insert,update,references |                    |
| pid        | int(10)       | NULL            | NO   | MUL | 0                   |                             | select,insert,update,references |                    |
| name       | varchar(20)   | utf8_general_ci | NO   |     | NULL                |                             | select,insert,update,references |                    |
| subarea    | varchar(1000) | utf8_general_ci | YES  |     | NULL                |                             | select,insert,update,references |                    |
+------------+---------------+-----------------+------+-----+---------------------+-----------------------------+---------------------------------+--------------------+
4 rows in set (0.00 sec)
 
显示二:
mysql> show full columns from destination \G
*************************** 1. row ***************************
     Field: id
      Type: int(10)
 Collation: NULL
      Null: NO
       Key: PRI
   Default: NULL
     Extra: auto_increment
Privileges: select,insert,update,references
   Comment:
*************************** 2. row ***************************
     Field: pid
      Type: int(10)
 Collation: NULL
      Null: NO
       Key: MUL
   Default: 0
     Extra:
Privileges: select,insert,update,references
   Comment:
*************************** 3. row ***************************
     Field: name
      Type: varchar(20)
 Collation: utf8_general_ci
      Null: NO
       Key:
   Default: NULL
     Extra:
Privileges: select,insert,update,references
   Comment:
*************************** 4. row ***************************
     Field: subarea
      Type: varchar(1000)
 Collation: utf8_general_ci
      Null: YES
       Key:
   Default: NULL
     Extra:
Privileges: select,insert,update,references
   Comment:
4 rows in set (0.00 sec)

修改默认字符集

1、修改mysqlmy.cnf文件中的字符集键值

编辑配置文件
#vi /etc/my.cnf
  [mysqld]
   default-character-set = utf8
   character_set_server = utf8
   collation-server=utf8_bin
更新编辑完成之后,重启mysql服务器使其生效。

2、使用mysql的命令修改字符集的方法

mysql> SET character_set_client = utf8 ;
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;

使其快速设置成相应的字符集,但重启之后会变成之前系统默认字符集。

问题追踪

设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,存入数据库的仍然是乱码。那connection连接层上可能出了问题。解决方法是在发送查询前执行一下下面这句: SET NAMES ‘utf8‘;它相当于下面的三句指令:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
时间: 2024-07-30 18:05:51

mysql数据库编码字符集的相关文章

解决mysql数据库不能支持中文的问题

迁移了一套内部系统(confluence)之后,页面打开,发现全是问号乱码了.分析原因: 我是按照如下方式创建数据库的: mysql> create database confluence  character set utf8 collate utf8_bin; Query OK, 1 row affected (0.00 sec) mysql> grant all on conflence.* to 'confluence'@'%' identified by '456456'; Quer

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 此错误的意思就是没有找到mysqld.sock文件. 解决办法: 首先进入超级用户root权限  sudo -i 或者su - root 切换到默认目录 cd /var/lib/mysql  下查看

MySQL数据库

day01 MySQL数据库及数据类型 一.MySQL概述: MySQL数据库是一个关系型数据库,是目前流行的开源代码数据库,是完全网络化的跨平台的关系型数据库系统,MySQL数据库同时也是目前市场上得到广泛运用的和安装使用的,可以称的上是目前运行速度最快的sql语言数据库,主要的优势和特点有一下几点: 1.成本---MySQL数据库是开源代码的,一般是免费使用. 2.性能---MySQL数据库执行速度快 3.可信赖---某些大型的公司和企业单位以及网站都是使用MySQL数据库. 4.简单---

MySQL数据库中的算术运算符

MySQL数据库中的算数运算符 MySQL数据库中的算术运算符 一.运算符的概述: 运算符在MySQL数据库中也是很重要的知识体,在执行sql语句的时候这个运算符对操作数据帮助很大.其中运算符的运用可以帮助你减省大量的时间,操作起来也比较灵活. 二.运算符 运算符主要包括"算数运算符"."比较运算符"."罗运算符"."位运算符"四大类,下面我们就一次学习一下. 1.算术运算符 算术运算符在sql语句的时候经常使用,例如对表的字

MySQL数据库自学

MySQL数据库自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激!  天下数据库同属一家,可以说是兄弟关系.学习MySQL数据库可以说是一件很有趣的学习过程,就目前市场上对MySQL数据库的程序员需求量比较大.当你自己应聘一份工作的时候,MySQL数据库的技术技能是你必须

利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

登录界面 <body><form action="login1.php" method="post"><div>用户名:<input type="text" name="uid" /></div><br /><div>密码:<input type="password" name="pwd" />

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能