我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MYSQL的字符集是怎样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MYSQL的字符集是怎样的

MYSQL的字符集是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

关于MYSQL的字符集,系统里面有很多个变量设置,很多初学者都不太搞得清楚,包括我自己也是.
所以在这里写点东西,希望把这几个东西的关系搞清楚.
MYSQL的字符集变量可以通过以下命令得到:


show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | gbk                        |
| character_set_connection | gbk                        |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    |                            |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

MYSQL的字符集变量其实可以分为两类,
一类是关于创建OBJECTS时要用到的.

character_set_database
 character_set_server

一类是在服务器处理连接的时候要用到的.
 character_set_client                                            
 character_set_connection                                        
 character_set_results

我们主要关注的是处理连接的字符集.

关注字符集问题,那你肯定是遇到了乱码的问题. 其实解决乱码问题在网上一搜一大堆.

如果能做到, 应用/MYSQL.CLENT/MYSQL.CONNETION/表/MYSQL.RESULT 的字符集一致,存取数据肯定没有问题.


我在这里把这三个连接字符集的关系理理.

经过多次的测试,我把MYSQL处理字符的过程主要归纳为:

例: WINDOWS客户端CHARSET=GBK,输入"中" , 通过WINDOWS.GBK转码为 $a = D6D0,
================================================================================
 # 服务器收到CLIENT送来的值"D6D0", 并认为"D6D0"是$MYSQL.character_set_client 指定字符集的数据.
 # 从 $MYSQL.character_set_client  转化---&gt $MYSQL.character_set_connection (如果字符集一样就不转换)
    if 转换成功 ; then
       $a = $MYSQL.character_set_client.code  
    else
       $a = 3f (在这个环节不会报错!)
    fi  
 
 # 从 $MYSQL.character_set_connection  转化---&gt $TABLES.character_set (如果字符集一样也会检查一次)
   if 转换成功 ; then
       $a = $MYSQL.character_set_client.code  , 并存入表
    else
       $a = 3f , 并报错: Incorrect string value
       $a = 20 ($MYSQL.character_set_connection = $TABLES.character_set 的情况)
    fi

 # 从数据库取数据.
 #   从 $TABLES.character_set --&gt $MYSQL.character_set_result
    if 转换成功 ; then  
       $a = $MYSQL.character_set_result.code  , 正常显示
    else
       $a = 3f/乱码 , 显示: ?或者乱码
   fi========================================================================================

以下是我测试过程中记录的各种情况及报错信息,以便大家分析:

(在这里我特意用了SSHTERM的两种字符集进行测试. 我们可以把它理解为应用.)

SSHTERMCHAR_clientCHAR_connectiontutf_dumptgbk_dumptlatin1_dumptutf_warningtgbk_warningtlatin1_warning
gbkutf8utf8203f3fIncorrect 'xD6xD0'
存入表UTF8转UTF8,这个环节字符集一样也转换一次.但在源字符集中没找到.返回"空"
Incorrect  'xD6xD0'
存入表,用UTF8转GBK时报错
Incorrect  'xD6xD0'
存入表,用UTF8转LATIN1时报错
 gbkgbke4b8add6d03f正常正常Incorrect  'xD6xD0'
存入表时用GBK转LATIN1时报错
D6D0latin1latin1c396c3903f3fd6d0正常:(存了UTF8的D6D0)
如果以LATIN1取还是"D6D0"
Incorrect  'xD6xD0'
LATIN1转GBK报错
正常
 gbkutf8e4b8add6d03f正常正常Incorrect xE4xB8xAD
存入表,用UTF8转LATIN1时报错
 utf8gbk3f3f3fCLIENT向CONN转换时已经丢了数据成3F,这中间的转换不会报错
         
utf8gbkgbke6b693e4b83fData truncated
"E4B8AD"只取了_GBK "E4B8"
Incorrect 'xAD
"E4B8AD"被两分了两段,而AD没能转换成功.
Incorrect 'xE4xB8xAD'
      在CONN向表转换的时候,上面两个的处理结果为什么不一样呢? 
 utf8utf8e4b8add6d03f正常正常Incorrect xE4xB8xAD
E4B8ADgbkutf8e6b693e4b83fCLENT转CONN数据被截取,
但这样的处理不会报错.
CLENT转CONN数据被截取,
但这样的处理不会报错.
Incorrect  'xE6xB6x93'
 utf8gbke4b8add6d03f正常正常Incorrect  'xD6xD0'
 latin1latin1c3a4c2b8c2ad3f3f3fe4b8ad理论上这是"E4B8AD"UTF8的CODE,但又有点不像xE4xB8xAD
LATIN1向GBK转不成功
正常

上表中,只要DUMP结果为e4b8ad/d6d0,说明数据存储都是正常的.而且可以正常读取.

DUMP结果为c396c390的情况比较特殊.读者稍加分析应该还是能明白的.(其实就是原存原取).


相关命令:
      
创建测试表:                                                                  
create table tutf (name char(10)) engine=myisam default character set=utf8 ;
create table tgbk (name char(10)) engine=myisam default character set=gbk ;
create table tlat (name char(10)) engine=myisam default character set=latin1 ;

设置相关字符集:
set character_set_client=gbk ;
set character_set_connection=utf8;
set character_set_results=latin1;  

插入并DUMP数据:
truncate table tutf;truncate table tgbk;truncate table tlat;
insert into tutf values ('中');   show warnings ;
insert into tgbk values ('中');   show warnings ;
insert into tlat values ('中');    show warnings ;
system  hexdump /home/mysql/data/test/tutf.MYD ;
system  hexdump /home/mysql/data/test/tgbk.MYD ;
system  hexdump /home/mysql/data/test/tlat.MYD ;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MYSQL的字符集是怎样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql字符集是什么

MySQL字符集是指用于存储和处理文本数据的字符编码系统,定义了数据库中可以使用的字符集合,以及每个字符在计算机中的表示方式,MySQL支持多种字符集,包括常见的字符集如UTF-8、Latin1等,以及其他语言特定的字符集,字符集决定了数据
2023-07-25

linux怎样修改字符集

小编给大家分享一下linux怎样修改字符集,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:1、利用“LANG=字符集”或者“export LANG=字符集”
2023-06-29

mysql怎么查看库的字符集

要查看库的字符集,可以使用以下命令:1. 连接到 MySQL 数据库服务器。2. 执行以下命令来查看库的字符集:SHOW CREATE DATABASE database_name;其中,database_name是要查看的数据库的名称。执
2023-10-19

MySQL的latin1字符集怎么使用

在MySQL中使用latin1字符集,可以在创建表时指定字符集为latin1,例如:CREATE TABLE my_table (id INT,name VARCHAR(50)) DEFAULT CHARACTER SET latin1
MySQL的latin1字符集怎么使用
2024-04-09

mysql字符集怎么用

mysql 字符集是一组受支持的字符及其编码。设置字符集的方法包括:创建数据库时指定(create database)、更改现有数据库(alter database)、或为表/列指定(create table)。mysql 支持多种字符集,
mysql字符集怎么用
2024-05-22

MySQL字符集排序的规则是什么

MySQL字符集排序规则是根据字符的二进制值来进行排序的。不同的字符集具有不同的排序规则,比如在Latin1字符集中,按照ASCII码的顺序来排序;在UTF-8字符集中,按照Unicode码的顺序来排序。MySQL提供了多种不同的字符集,可
MySQL字符集排序的规则是什么
2024-04-09

MySQL查看字符集的方法是什么

MySQL查看字符集的方法有两种:1. 使用SHOW VARIABLES语句:在MySQL命令行客户端中,输入以下命令:```SHOW VARIABLES LIKE 'character_set_%';```这将显示所有相关的字符集相关变量
2023-09-23

怎么修改mysql的默认字符集

要修改MySQL的默认字符集,您可以按照以下步骤进行操作:1. 打开MySQL的配置文件my.cnf。在Windows上,该文件通常位于MySQL安装目录下的bin文件夹中。在Linux上,该文件通常位于/etc/mysql/或/etc/m
2023-09-25

mysql的默认字符集怎么修改

MySQL的默认字符集可以通过以下两种方法进行修改:1. 修改配置文件:打开MySQL的配置文件(通常是my.cnf或my.ini),找到[mysqld]部分,在该部分中添加或修改以下参数:```[mysqld]character-set-
2023-09-27

MySQL字符集,永恒的痛

最近迁移mysql和升级mysql版本,遇到了很多乱码(主要是表情问题)问题,所以记录下。

mysql默认字符集是哪个

本篇内容介绍了“mysql默认字符集是哪个”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mysql默认字符集是
2023-05-25

编程热搜

目录