重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、 编辑MySql的配置文件
在仙桃等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需策划,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站制作,仙桃网站建设费用合理。
MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是/etc/my.cnf
--在 [mysqld] 标签下加上以下内容:
default-character-set = utf8
character_set_server = utf8
注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。
--在 [mysql] 标签下加上一行
default-character-set = utf8
--在 [mysql.server]标签下加上一行
default-character-set = utf8
--在 [mysqld_safe]标签下加上一行
default-character-set = utf8
--在 [client]标签下加上一行
default-character-set = utf8
2、 重新启动MySql服务
Windows可在服务管理器中操作,也可使用命令行:
net stop mysql 回车
net start mysql 回车
服务名可能不一定为mysql,请按自己的设置
Linux下面可是用 service mysql restart
如果出现启动失败,请检查配置文件有没有设置错误
3、 查看设置结果
登录MySql命令行客户端:打开命令行
mysql –uroot –p 回车
输入密码
进入mysql后 执行 :show variables like "% character %";
显示结果应该类似如下:
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:
set character_set_client = utf8;
set character_set_server = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set collation_connection = utf8_general_ci;
set collation_database = utf8_general_ci;
set collation_server = utf8_general_ci;
另外:
建立数据库时可以使用以下命令:
create database app_relation character set utf8;
use app_relation;
source app_relation.sql;
修改数据库编码的命令为:
alter database app_relation character set utf8;
import_table(importTable) 的延申功能:可定制化行输入。
import_table(importTable) 我们之前有介绍过,是一款并行导入各种格式文本的工具,封装了 MySQL 语句 load data local infile。
比如说要导入一个以 TAB 为分隔符的文本数据文件:/tmp/sample_ytt.txt 到表:ytt_new.t1,可以执行下面语句:
上面结果是 load data infile 语句的导入结果。如果改用 import_table 方法来做同样的事情,基于 Python 语法,使用方法如下:
那接下来看另外一个需求:在导入文本文件时对每行做预处理(例如在导入数据之前更改列 r2 的值为 mod(r1,10),列 r5 的值为 abs(r4-46) ),这样可以减少导入后再次处理的时间开销。
这个需求用 load data infile 语句非常容易实现:(导入时更改列 r2 和 r5 的数据,类似 UPDATE 语法)
那如果要用 util.import_table(importTable) 来实现上面的需求,在 MySQL 8.0.22 之前是没办法的。
随着 MySQL 8.0.22 的发布,MySQL 对 import_table 方法做了些扩充功能,其中增加了一个选项 “decodeColumns” 可以实现字段的预先输入定制化功能,并且还可以更加丰富。
接下来用 import_table 来实现上面的需求,定制化字段 r2 和 r5:
以上 Options 选项,见下图:
我来具体解释下上图的含义:蓝色字体 columns 对应的数组分别指定数据文件中的每行字段,也就是默认的 TAB 分隔符所分割的每列值,1 和 2 代表占位符,1 代表数据文件中每行的第一个列,2 代表数据文件中每行的第四列,decodeColumns 字典分别对需要预先输入的字段做处理。比如 r1 字段保留为变量 @1,r2 字段对应 mod(r1,10) 等。
如果还是不太理解变换规则,可以临时打开 general log, 上面 import_table(importTable)对应的 MySQL 日志为:
以上日志写的很清楚,内部转换为最基本的load data infile语法。
那这里我简单解读了下 MySQL 8.0.22 对 MySQL Shell 的一项定制化输入文本文件的新特性,更多的新特性可以继续关注。
前言
上篇《VARCHAR(M) 到底占用多少个字节?|mysql系列(2)》分享了VARCHAR(M) 占用多少个字节,那VARCHAR 最大能存多少个字符呢?以及了解这些对我们平时的开发工作中有什么帮助呢?那我们就要了解下存储引擎中是怎么来处理数据的。这里我们还是以InnoDB 为例。
InnoDB数据记录的结构
在《执行sql 语句时发生了什么?|mysql 系列(1)》一文中讲到,MySQL服务器上负责对表中数据的读取和落盘(即写入磁盘)工作是由存储引擎 完成的。InnoDB是一个将表中的数据存储到磁盘上的存储引擎 。这也是mysql 持久化的保证。插入的数据记录在磁盘上的存放方式被称为行格式或者记录格式。Mysql 目前有4种行格式:Redundant、Compact、Dynamic、Compressed.
其中:
Redundant 目前貌似很少使用了。
可以用下面的语句来查看行格式。
我们以常用的Compact、Dynamic、Compressed 行格式为例。一条完整的记录其实可以被分为 记录的额外信息 和记录的真实数据两大部分 。Compact、Dynamic、Compressed行格式不同的地方在记录的真实数据部分。我们寻求答案的地方在记录的额外信息里面。
记录的额外信息
记录的额外信息包括:变长字段长度列表、NULL值列表和记录头信息。
变长字段长度列表: 比如VARCHAR(M)、VARBINARY(M)、各种TEXT类型,各种BLOB类型,把拥有这些数据类型的列称为变长字段 ;
变长字段占用的存储空间分为两部分:
真实数据内容是就是存的具体的值。那么对于占用的字节数该怎么表示呢?
如果列中的字符串都比较短,也就是说内容占用的字节数比较小,用1个字节就可以表示,但是如果变长列的内容占用的字节数比较多,可能就需要用2个字节来表示。具体用1个还是2个字节来表示真实数据占用的字节数。
对于VARCHAR(M)来说:
如果M×L = 255,那么使用1个字节来表示真正字符串占用的字节数。
如果M×L 255,则分为两种情况:
所以,如果最多有2个字节来表示真正字符串占用的字节数的话。2个字节能表示最大的数为: 16个2进制位 也就是2的16次方= 65535 。如果VARCHAR(M)类型的列使用的不是ascii字符集,那M的最大取值取决于该字符集表示一个字符最多需要的字节数。
举个例子:
以上就是今天的分享,欢迎拍砖!
Mysql的row_format
在mysql中, 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。
所以,做搜索查询量大的表一般都以空间来换取时间,设计成静态表。
row_format还有其他一些值:
DEFAULT
FIXED
DYNAMIC
COMPRESSED
REDUNDANT
COMPACT
修改行格式
ALTER TABLE table_name ROW_FORMAT = DEFAULT
修改过程导致:
fixed---dynamic: 这会导致CHAR变成VARCHAR
dynamic---fixed: 这会导致VARCHAR变成CHAR