MySQL的字符编码体系(一)——数据存储编码
安装MySQL好多次了,每次都会纠结于数据库的字符编码配置,所以我决定这一次彻底把它理清。
MySQL的字符编码结构比較细,它慷慨向分为两个部分:数据存储编码和传输数据编码。本篇讨论数据存储编码部分,传输数据编码在下一篇MySQL的字符编码体系(二)——传输数据编码中讨论。
编码层次
数据存储的字符编码配置是指定数据库中存储的数据默认採用什么字符编码。默认字符编码的设置分为四个层次:server级、数据库级、数据表级和列级。
也就是说。能够为server设置一个默认字符编码,再为server中的每个数据库设置不同的默认编码。再为同一个数据库中的每个数据表设置不同的默认编码,再为同一个数据表中的每个列设置不同的默认编码。
MySQL数据库server的逻辑结构
那这四个层次的编码设置究竟怎样起作用呢?假设新建数据库时没有指定字符编码,就默认设置为server的编码;假设新建数据表时没有指定不论什么编码,就默认设置为数据库的编码;假设向数据表加入新列或新建数据表时没有特别指定某些列的编码,那么这些列就默认设置为数据表的编码。注意这里四个层次的编码都是作为“默认”的存在,用户创建数据库、表或添加列时直接指定的编码是最优先的。
还有一方面,直接改变这四个层次的编码并不会改变它们各自全部下层对象的当前编码。比方改动仅仅Server级,那么全部已经存在的数据库的默认编码不变,数据表、表列以及每一行现有数据记录的字符编码都不变,可是假设新建一个数据库且不指定其默认编码,那它的默认编码就会被设置为Server的默认编码;相同即使改动了全部四个层次的编码。可是数据表中每一条现有记录的字符字段仍然是按原来的编码存储的,可是假设向数据表中新插入一条记录,数据库将依据数据表当前各列的默认编码来存储该条记录的各个字符字段。
设置方法
改动Server下面各级编码的SQL语句例如以下:
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
ALTER TABLE dbl_name [DEFAULT] CHARACTER SET [=] charset_name
ALTER TABLE dbl_name MODIFY [COLUMN] col_name {CHAR[(length)] | TEXT} CHARACTER SET charset_name
注意上面第三条改动列字符编码,实际上是通过全然又一次定义列属性的方式实现的,语法跟创建新数据表时指定列字段属性一样的。所以假设这里仅仅是想改动列字符编码,那就必须完整地写上创建该列时使用的全部定义修饰。
改动Server默认编码能够通过执行时直接改动变量character_set_server实现。但这样是暂时性的,client关闭重新启动后又会自己主动恢复。
要想永久改变Server默认编码须要在my.ini或my.cnf配置文件的“[mysqld]”区域中设定该变量的值,然后重新启动服务器:
[mysqld]
character_set_server=charset_name
MySQL的字符编码体系(一)——数据存储编码的更多相关文章
- Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结
Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结 分类具体知识点原理规范具体实现(oracle,mysql,mssql是否可以自己实现说明 数据库理论数据库的类型 数据 ...
- MySQL的字符编码体系(二)——传输数据编码
MySQL的字符编码体系能够分成两部分:一部分是关于数据库server本身存储数据表时怎样管理字符数据的编码:还有一部分是关于client与数据库server数据传输怎样编码.上一篇MySQL的字符编 ...
- centos 7.1系统更改Mariadb数据存储位置步骤分享
一.首先确保你要更改Mariadb数据存储的位置的空间够大 现在已将Mariadb存储位置更改到/opt/目录下 1.然后将Mariadb服务stop:systemctl stop mariadb 2 ...
- MySQL学习笔记之数据存储类型
说明:本文是作者对MySQL数据库数据存储类型的小小总结. Numeric Type (数字类型) 1.TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT主要根据存储字节长度不 ...
- Mysql 的字符编码机制、中文乱码问题及解决方案【转载】
本文转载自:http://hi.baidu.com/huabinyin/item/7f51e462df565c97c4d24929.感谢作者及相关博主. 相信很多朋友都会对字符编码敬而远 ...
- 拨开字符编码的迷雾--MySQL数据库字符编码
拨开字符编码迷雾系列文章链接: 拨开字符编码的迷雾--字符编码概述 拨开字符编码的迷雾--编译器如何处理文件编码 拨开字符编码的迷雾--字符编码转换 拨开字符编码的迷雾--MySQL数据库字符编码 1 ...
- 前端网页、php与mysql数据库字符编码(解决中文等乱码问题)
web开发中经常涉及前端网页——php——mysql之间的数据交互,当数据只有英文时通常不会有什么问题,但一旦涉及中文,三个地方的某一处字符编码不一致(如,网页使用的时gbk而mysql使用utf-8 ...
- Python2爬虫获取的数据存储到MySQL中时报错"Incorrect string value: '\\xE6\\x96\\xB0\\xE9\\x97\\xBB' for column 'new' at row 1"的解决办法
由于一直使用python3进行编码,在使用Python2时,将爬虫数据连接数据库进行存储时,出现如上的报错,经查资料 是数据库编码问题. 如下转自:http://www.cnblogs.com/liu ...
- ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法
ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法 前几天卸掉了用了好多年的Windows,安装了Ubuntu12.04,就开始各种搭环境.今天装好了MySQ ...
随机推荐
- Python_sort函数结合functools.cmp_to_key(func)分析
举例如下: from functools import cmp_to_key persons = [ { 'name':'zhangsan', 'age':20, 'grade':98 }, { 'n ...
- Python3的基本数据类型及常用的方法
python3的基本数据类型: 在python3当中有这么几种基本的数据类型:int(整形).str(字符串).list(列表).tuple(元组).dict(字典).bool(布尔值)等.数字整体划 ...
- Poj 1041--欧拉回路
Description Little Johnny has got a new car. He decided to drive around the town to visit his friend ...
- DocView mode 2 -- 快捷键
** 启动 C-c C-c 切换DocView和文件内容显示 M-x doc-view-mode 启动主模式 M-x doc-view-minor-mode 启动辅模式 k k ...
- return_url notify_url
return_url对返回订单状态进行更新和判断,notify_url为异步调动页面,需要先判断notify_url里是否对订单数据做过处理,避免重复更新数据,然后如果用户付款成功直接关闭页面,会造成 ...
- grunt与seajs结合应用
9.seajs构建的问题 01.png和02.jpg 10.seajs与grunt如何结合开发.两个插件:grunt-cmd-transport grunt-cmd-contact ,去grunt官网 ...
- PHP cannoy modify header information - headers already sent by ....
我采用的是MVC模式的写法,代码和html分离的写法 <?php require '../mysql_connect.php'; require('../model/functions.php' ...
- Cocos2d-JS 实现将TiledMap中的每个 tile 变成物理精灵的方法
How to generate a physics body from a tiledmap 鄙人在网上找了许久都未找到方法,说句实在话,Cocos2d官方给出的与物理引擎相关的内容真的不是很多, ...
- php 投票
1.投票主界面(问题界面) <?php$db = new Mysqli("localhost","root","root"," ...
- 30分钟学会如何使用Shiro(转自:http://www.cnblogs.com/learnhow/p/5694876.html)
本篇内容大多总结自张开涛的<跟我学Shiro>原文地址:http://jinnianshilongnian.iteye.com/blog/2018936 我并没有全部看完,只是选择了一部分 ...