- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章mysql字符集相关总结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
这边笔记主要记录一下对mysql字符集相关知识的学习 。
。
一般我们使用如下语句创建一张表,创建表的时候指定了charset为utf8编码.
1
2
3
4
5
6
7
|
create
table
`test` (
`c1`
int
unsigned
not
null
auto_increment,
`c2`
varchar
(255),
`c3`
char
(11),
`c4`
varchar
(255),
primary
key
(`c1`)
) engine=innodb
default
charset=utf8;
|
但其实mysql也支持除了utf8之外的其他字符集,可以使用命令 show charset 查看当前mysql支持的所有字符集.
例如下图就是我的mysql支持的所有字符集.
可以从上图中看到,第四列表示该字符集最大长度。我们建表时常用的 utf8 在mysql里面实际最大长度是 3 个字符。一般认知中utf8是用1~4个字符来表示具体的内容的,但mysql里面的 utf8 实际是 utf8mb3 的别名,正宗的的最大用4个字符表示的在mysql中是 utf8mb4 .
注意:
1
2
|
utf8mb4
utf8mb4
|
。
在上面那张图中,第三列 default collation 就是这些字符集默认的比较规则。例如acsii字符集的默认比较规则是 ascii_general_ci ,utf8字符集的默认比较规则是 utf8_general_ci .
其实每个字符集有很多种比较规则,例如我们看一下acsii字符集有哪些比较规则,如下图所示 。
1
2
3
4
5
6
7
|
mysql> show collation
like
'ascii%'
;
+
------------------+---------+----+---------+----------+---------+
| collation | charset | id |
default
| compiled | sortlen |
+
------------------+---------+----+---------+----------+---------+
| ascii_general_ci | ascii | 11 | yes | | 0 |
| ascii_bin | ascii | 65 | | | 0 |
+
------------------+---------+----+---------+----------+---------+
|
ascii_general_ci 表示是一种通用的比较,其中 _ci 表示是不区分大小写(case insensitive)。(反之 _cs 就表示大小写敏感) 。
ascii_bin 表示是二进制比较 。
再看一下utf8、utf8mb4字符集有哪些比较规则,如下图所示 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
mysql> show collation
like
'utf8%'
;
+
--------------------------+---------+-----+---------+----------+---------+
| collation | charset | id |
default
| compiled | sortlen |
+
--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci | utf8 | 33 | yes | yes | 1 |
| utf8_bin | utf8 | 83 | | yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | yes | 8 |
| utf8_polish_ci | utf8 | 197 | | yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | yes | 8 |
| utf8_czech_ci | utf8 | 202 | | yes | 8 |
| utf8_danish_ci | utf8 | 203 | | yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | yes | 8 |
| utf8_roman_ci | utf8 | 207 | | yes | 8 |
| utf8_persian_ci | utf8 | 208 | | yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | yes | 8 |
| utf8_german2_ci | utf8 | 212 | | yes | 8 |
| utf8_croatian_ci | utf8 | 213 | | yes | 8 |
| utf8_unicode_520_ci | utf8 | 214 | | yes | 8 |
| utf8_vietnamese_ci | utf8 | 215 | | yes | 8 |
| utf8_general_mysql500_ci | utf8 | 223 | | yes | 1 |
| utf8mb4_general_ci | utf8mb4 | 45 | yes | yes | 1 |
| utf8mb4_bin | utf8mb4 | 46 | | yes | 1 |
| utf8mb4_unicode_ci | utf8mb4 | 224 | | yes | 8 |
| utf8mb4_icelandic_ci | utf8mb4 | 225 | | yes | 8 |
| utf8mb4_latvian_ci | utf8mb4 | 226 | | yes | 8 |
| utf8mb4_romanian_ci | utf8mb4 | 227 | | yes | 8 |
| utf8mb4_slovenian_ci | utf8mb4 | 228 | | yes | 8 |
| utf8mb4_polish_ci | utf8mb4 | 229 | | yes | 8 |
| utf8mb4_estonian_ci | utf8mb4 | 230 | | yes | 8 |
| utf8mb4_spanish_ci | utf8mb4 | 231 | | yes | 8 |
| utf8mb4_swedish_ci | utf8mb4 | 232 | | yes | 8 |
| utf8mb4_turkish_ci | utf8mb4 | 233 | | yes | 8 |
| utf8mb4_czech_ci | utf8mb4 | 234 | | yes | 8 |
| utf8mb4_danish_ci | utf8mb4 | 235 | | yes | 8 |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | yes | 8 |
| utf8mb4_slovak_ci | utf8mb4 | 237 | | yes | 8 |
| utf8mb4_spanish2_ci | utf8mb4 | 238 | | yes | 8 |
| utf8mb4_roman_ci | utf8mb4 | 239 | | yes | 8 |
| utf8mb4_persian_ci | utf8mb4 | 240 | | yes | 8 |
| utf8mb4_esperanto_ci | utf8mb4 | 241 | | yes | 8 |
| utf8mb4_hungarian_ci | utf8mb4 | 242 | | yes | 8 |
| utf8mb4_sinhala_ci | utf8mb4 | 243 | | yes | 8 |
| utf8mb4_german2_ci | utf8mb4 | 244 | | yes | 8 |
| utf8mb4_croatian_ci | utf8mb4 | 245 | | yes | 8 |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | yes | 8 |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | yes | 8 |
+
--------------------------+---------+-----+---------+----------+---------+
|
使用不同的比较规则对数据进行比较,结果可能是不一样的.
字符集和比较规则是对应的,不管是只修改字符集还是只修改比较规则,另一方都会相应地自动变化.
。
上文提到了字符集和比较规则,实际上在mysql里面有不同级别的字符集和比较规则
服务器级别的字符集可以看参数 character_set_server ,服务器级别的比较规则可以看参数 collation_server 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql> show variables
like
'character_set_server'
;
+
----------------------+-------+
| variable_name | value |
+
----------------------+-------+
| character_set_server | utf8 |
+
----------------------+-------+
1 row
in
set
(0.00 sec)
mysql> show variables
like
'collation_server'
;
+
------------------+-----------------+
| variable_name | value |
+
------------------+-----------------+
| collation_server | utf8_general_ci |
+
------------------+-----------------+
1 row
in
set
(0.00 sec)
|
如果要查看数据库级别的字符集和比较规则,那么可以先 use xxxdb 切换到具体的数据库,然后执行 show variables like 'character_set_database' 和 show variables like 'collation_database' 来查看该数据库的字符集和比较规则.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
database
changed
mysql> show variables
like
'character_set_database'
;
+
------------------------+-------+
| variable_name | value |
+
------------------------+-------+
| character_set_database | utf8 |
+
------------------------+-------+
1 row
in
set
(0.00 sec)
mysql> show variables
like
'collation_database'
;
+
--------------------+-----------------+
| variable_name | value |
+
--------------------+-----------------+
| collation_database | utf8_general_ci |
+
--------------------+-----------------+
1 row
in
set
(0.00 sec)
|
如果要查看某个表的字符集和比较规则,或者表中的某个列的字符集和比较规则,那么可以使用 show create table xxxtb 来查看具体的建表语句,里面就有使用的字符集和比较规则.
如果创建数据库的时候没有指定字符集和比较规则,则会使用服务器级别的字符集和比较规则作为数据库的字符集和比较规则。如果创建和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则作为该表的字符集和比较规则 。
。
mysql服务器可以对应多个客户端,而这些客户端的编码方式可能不同,但存在数据库里的数据的字符集是一定的,mysql就要针对不同的客户端进行编码转换处理,然后返回结果给客户端.
在mysql里面,有三个 session级别 的系统变量,可以进行上述操作:
mysql服务器会为每个客户端都维护一份session级别的这三个变量.
不过在实际生产环境中,为了避免麻烦,公司一般都会有规范规定客户端默认都使用utf8字符集.
以上就是mysql字符集相关总结的详细内容,更多关于mysql字符集的资料请关注我其它相关文章! 。
原文链接:https://www.tuicool.com/articles/EVziMni 。
最后此篇关于mysql字符集相关总结的文章就讲到这里了,如果你想了解更多关于mysql字符集相关总结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
第一段代码工作正常,并给出了我需要的结果。我现在想做的是让它在 'as num' 上返回 3 个数字值对于“as num”上的 3 个不同值,对于同一列上的 3 个不同位置 SELEC
我想分析一些数据以编写定价算法。以下日期可用: 我需要三个变量/维度的函数/相关因子,它显示三个维度(pers_capacity、卧室数量、浴室数量)增长时中位数(价格)的变化。例如Y(#pers_c
正如标题所说 - 我的 Sprite Kit 游戏时不时地在后台崩溃,总是出现此错误 - Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Sub
假设我尝试保存以下数据,并且Songs模型的name属性上设置了Phalcon \ Mvc \ Model \ Validator \ PresenceOf验证器 // Get an existing
我有一个 if 控件,如下所示; if (Directory.Exists(System.IO.Path.Combine(systemPath, "Reports", companyName))
有人可以告诉我我们使用 ReadLine() 从文件 (.txt) 中读取特定行吗?现在我想读取文件的全部内容(不仅仅是第一行)。为此我需要使用什么方法。我用谷歌搜索了很多,但找不到解决方案。 我的代
我相信在大学时我用从 C 派生的语言为 FPGA 编写了一个程序。我了解 VHDL 和 verilog 等语言。但是,我不明白的是程序员在使用哪个方面有多少选择?它依赖于FPGA吗?我将使用 Xili
我有一个 if 控件,如下所示; if (Directory.Exists(System.IO.Path.Combine(systemPath, "Reports", companyName))
如何在运行时更改 Dashcode (Javascript) 中图像对象的源? 我试过: var image = document.getElementById("image").object;ima
我有几个相互关联的类,它们将被多种不同的算法使用 例子: struct B; struct A { B* parent; }; struct B { std::vector child
我正在开发一个网站,用户在客户收到的表中输入金额,如果任何客户没有提供分期付款(金额),则用户不会在表中输入任何金额,并且用户希望获取违约者的信息客户以10天为基础。所以我的问题是应该定义什么表和属性
我试图从上一个条目中选择一个值,并每次将该数字加一。我让它工作到选择当前条目值(默认 1000)并递增 1 并重新插入该值(因此每次最终都是 1001)。我需要它来选择该字段的最后一个条目,这样它将变
我不擅长“制作”查询。假设这是我的数据库: artist pics ------------------- -
最近,我要为我的网站做一个即时通知系统。我听说 COMET 在这种情况下必不可少。 我已经搜索 PHP 和 Comet 一段时间了,但是,我发现的指南和文章似乎只是循环中的 ajax 请求。例如,有一
我正在开发一款 iOS 游戏,我希望 clown 在场景外生成,然后向下移动。我的想法是全部创建它们,并将它们以 360 像素的距离放置在不可见的场景中。 像这样: SKSpriteNode *clo
我有以下子订单表。 mysql> select * from suborder; +-------------+------------------+ | order_state | bookin
这可能是一个有点初学者的问题,但考虑到在 Java 中调试编码是相当相关的:什么时候编码与 String 对象相关? 假设我有一个要保存到文件中的字符串对象。 String 对象本身是否使用某种我应该
首先我想说我是 CPP 的新手(我从 cpp11 开始):)考虑以下实体:学生(名字+姓氏)和组(描述+更多学生)。我在 C++ 中创建了以下 2 个类: class Student { privat
我正在尝试在单击该复选框时同步更新我的数据库。我决定使用 aJax,但它似乎无法识别 ajax。 代码:将成为 Switch_Active(this.id) 函数的元素 ... Deactivat
我正在创建一个菜单。菜单如下。 $('.category').mouseover(function() { $(this).removeClass('category').addClass('cate
我是一名优秀的程序员,十分优秀!