mysql数据库字符集 MySQL中数据库的默认字符集和校对规则有哪些
大家好,今天来为大家解答mysql数据库字符集这个问题的一些问题点,包括MySQL中数据库的默认字符集和校对规则有哪些也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
mysql数据库表里中文乱码应该选哪种编码
数据库中关于字符集的种类有很多,个人建议,数据库字符集尽量使用utf8(utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集.如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来.而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束对编程有影响的主要是客户端字符集和数据库字符集(还有一个服务器字符集,不知道干什么用的),数据库中常用的操作就是保存数据和读取数据,在这过程中,乱不乱码和数据库字符集貌似没有什么关系。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次操作的客户端字符集一致即可。 \x0d\x0a在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。 \x0d\x0a三个MySQL的系统变量是: \x0d\x0a1. character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式 \x0d\x0a2. character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式 \x0d\x0a3. character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式 \x0d\x0a在MySQL终端通过执行命令 show variables like‘char%’可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]就可以修改这三个变量的值。一般来说,只要你设定了能够表示你的数据的字符集,你查询的结果都可以在终端正确显示。 \x0d\x0a举个例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下 \x0d\x0amysql>create table t1( c1 text not null) character set utf8; \x0d\x0a用的字符是汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83 \x0d\x0a用下面的SQL语句插入数据 \x0d\x0amysql>insert into t1 values(‘范’); \x0d\x0aa)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1) from t1得到数据的十六进制编码来验证。 \x0d\x0a\x0d\x0ab)如果终端设置为 utf8,并且执行了set names gbk,那么执行完这个插入操作后,写入的二进制数据是E9 91 BC,这是“汉字“锣”的utf8编码。这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插入的时候进行了一次gbk到utf8的转换,结果当然是错误的。 \x0d\x0a\x0d\x0ac)如果终端设置为gbk,并且执行了set names gbk,那么执行完插入操作后,写入t1的依然是“范”这个字的utf8编码。插入过程中,终端输入的是“范”的gbk编码B7 B6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8的编码转换。 \x0d\x0a\x0d\x0ad)如果终端设置为gbk,并且执行了set names utf8,那么执行完插入操作后,MySQL会报出一个数据被截断的警告。实际上,输入终端的是“范”这个字符的gbk编码B7 B6,而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据的时候,发现B7 B6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3F 3F,也就是两个问号。 \x0d\x0a\x0d\x0a查询的时候是同样的道理,MySQL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码。 \x0d\x0a\x0d\x0a结论是,只要终端的字符集和set names指定的字符集一致就可以让MySQL在处理过程中执行正确的转码并且正确地显示。 \x0d\x0a\x0d\x0a另外,如果通过程序操作MySQL数据库,那么也需要事先执行set names命令来指定程序希望输出的字符集。比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据。
MySQL中数据库的默认字符集和校对规则有哪些
1. ASCII
用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。
编码范围:U+0000- U+007F
注意:对于用这类字符的场景够用了,但是却无法表达比如汉字,日文等编码。
2. UNICODE
用途:用来映射包含 ASCII以内的其他的所有字符。
编码范围:U+0000- U+10FFFF
注意:ASCII是 UNICODE的子集,ASCII编码的字符可以无损转换为 UNICODE编码的字符。
MySQL常用字符集
1. Latin1
Latin1是 cp1252或者 ISO-8859-1的别名。ISO-8859-1编码是单字节编码,向下兼容 ASCII。
编码范围:U+0000- U+00FF
ISO-8859-1收录的字符除 ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
单字节内的空间都被 ISO-8859-1编码占用,所以能够用 ISO-8859-1编码存储、传输其他任何编码的字节流。
比如把一个 Utf8mb4的编码或者 GBK的编码存入 Latin1,不会有任何问题。因为 Latin1保留了原始的字节流,这也就是 MySQL长期以来把 Latin1做默认字符集的原因。
但是由于 Latin1对任何字符都存放字节流,造成了字符个数的浪费。
比如:
CHAR(10) CHARACTER SET LATIN1;CHAR(10) CHARACTER SET UTF8;
该字段中存储字符个数 UTF8是 Latin1的三倍!!!
2. GB18030
GB18030是中国官方标准字符集,向前兼容 GBK、GB2312,是这两个的超集。用 1、2、4个字节分别表示一个符号。比如对一般中文字符,默认是用两个字节编码存储。Windows系统,默认用的就是 GB18030。
若只是存储中文字符,那 GB18030最佳。
原因有两点:
1)占用空间小,比如比 UTF8小。
2)存储的汉字根据拼音来排序,检索快。
3. UTF8
UTF8是 Unicode的编码实现,可以存储 UNICODE编码对应的任何字符,这也是使用最多的一种编码。最大的特点就是变长的编码方式,用 1到 4个字节表示一个符号,可以根据不同的符号编码字节长度。
字母或数字用 1字节,汉字用 3字节,emoji表情符号用 4字节。UTF8字符集目前是使用最广泛的。
注意!MySQL里常说的 UTF8是 UTF8MB3的别名,UTF8MB3是 UTF8MB4的子集,UTF8MB4才是真正的 4字节 UTF8字符集!
UTF8MB3表示最大支持 3个字节存储字符,UTF8MB4表示最大 4个字节存储字符。根据实际需要和未来展望,MySQL 8.0已经默认用 UTF8MB4基础字符集。
怎么查看mysql的数据库编码格式
1、查看数据库编码格式
mysql>showvariableslike'character_set_database'
2、查看数据表的编码格式
mysql>showcreatetable<表名>;
3、创建数据库时指定数据库的字符集
mysql>createdatabase<数据库名>charactersetutf8;
4、创建数据表时指定数据表的编码格式
createtabletb_books(
namevarchar(45)notnull,
pricedoublenotnull,
bookCountintnotnull,
authorvarchar(45)notnull)defaultcharset=utf8;
5、修改数据库的编码格式
mysql>alterdatabase<数据库名>charactersetutf8;
6、修改数据表格编码格式
mysql>altertable<表名>charactersetutf8;
7、修改字段编码格式
mysql>altertable<表名>change<字段名><字段名><类型>charactersetutf8;
mysql>altertableuserchangeusernameusernamevarchar(20)charactersetutf8notnull;
mysql 建数据库用什么字符集
mysql创建数据库一般使用的字符集为UTF-8,但具体的要根据实际情况进行选择。
工具:mysql5.6,Navicat Premium
步骤:
1、打开Navicat Premium,双击左侧服务器的树形结构,连接到服务器,这里以localhost为例。
2、在localhost处点右键,选择“新建数据库”。
3、弹出窗口中,填写新建的数据库名字,这里填写的是“badkano”,然后选择字符集,下拉列表,选择UTF-8,排序规则可不填,然后点“确定”按钮。
4、由图可见,badkano数据库创建成功。
好了,文章到这里就结束啦,如果本次分享的mysql数据库字符集和MySQL中数据库的默认字符集和校对规则有哪些问题对您有所帮助,还望关注下本站哦!