目录
回复内容:
首页 后端开发 php教程 关于字符编码的问题?

关于字符编码的问题?

Jun 06, 2016 pm 08:39 PM
mysql php

中文在gb2312编码的时候是2字节,但在unicode编码的 情况下是1-3字节不等,英文则都是1字节,但在mysql中不做这方面的设定,varchar的长度不管是中文和英文都是一格字算一个,那么。。为什么要做这个1个汉字相当于2个英文字符的设定?

回复内容:

中文在gb2312编码的时候是2字节,但在unicode编码的 情况下是1-3字节不等,英文则都是1字节,但在mysql中不做这方面的设定,varchar的长度不管是中文和英文都是一格字算一个,那么。。为什么要做这个1个汉字相当于2个英文字符的设定?

http://xfhnever.com/blog/2014/12/20/encodingformat/ 中稍微介绍了一下各种编码格式

varchar(20)指定的是字符长度
mysql中会指定表的字符集,如下面的CHARSET=gbk

<code> CREATE TABLE `test_type` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gbk COLLATE=gbk_bin
</code>
登录后复制

为什么要做这个1个汉字相当于2个英文字符的设定?

这种设定是一般基于字符串的自然长度(也就是显示的长度), 一个汉字等于2个英文字母或数字。对于普通用户来讲就是字样,计算字节一般不都是程序和程序员干的事么。所以一般的程序设计中,一般遵循着一个汉字就是2个英文字母长度的设定,而具体占用空间则视编码和环境进行计算。

参建函数 mb_strwidth()

最早出现的编码是ASCII这样面向英文语言的编码,ASCII定义了0-127,一共128个字符的编码。对于英语这样用26个字符的,自然是够用的。问题是,如果是其他使用的字符多余26个的西方文字呢?由于已经约定了0x7F空间内的字符编码,所以我们可以看到有些西方文字,例如俄文是完全不和英文共用部分字符的,需要使用ASCII扩展集。在编码理论发展的过程,出现过各个地域分别采用不同编码体系来编码本国文字。中国是使用ISO2022体系,编码了中国的常用字符GB2312,更多的字符GBK,以及最大的集合GB18030。

通过简单的思考,你会发觉一个字节8bits只能编码类似英文这样的文字系统,而中文的常用字就有几千上万个。所以至少需要2个字节。

Unicode的出现,目的是统一全世界所有的字符编码空间,不会造成字符编码冲突问题。例如,如果你用GBK编码的字符,用UTF-8编码解释,也可能是字面有效的。Unicode编码有UTF-8,UTF-16,UTF-32,甚至UTF-7等多种格式。常说的Unicode编码是指UTF-16,因为它能以统一的方式编码几乎所有常用的字符,所以如果不是针对极端情况,我们可以假设字符都能用UTF-16表示。在UTF-16编码的情况下,汉字和英文每个字符的长度都是2个字节,是等长的。在Windows系统内部就是利用这种特性,高效的处理文字。UTF-8应用也很广泛,好处是存储上来说空间节省,解码复杂些。

MySQL在多个层面上都做了Encoding的设计,支持在不同层面上指定字符编码。

不过显然,我们应该推荐在各个层面是使用UTF-8编码。如果是内存中处理,推荐使用UTF-16,其实各种语言在设计中,好像也是这样设计的。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

MySQL:初学者的数据管理易用性 MySQL:初学者的数据管理易用性 Apr 09, 2025 am 12:07 AM

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。

忘记数据库密码,能在Navicat中找回吗? 忘记数据库密码,能在Navicat中找回吗? Apr 08, 2025 pm 09:51 PM

Navicat本身不存储数据库密码,只能找回加密后的密码。解决办法:1. 检查密码管理器;2. 检查Navicat的“记住密码”功能;3. 重置数据库密码;4. 联系数据库管理员。

mysql怎么查看 mysql怎么查看 Apr 08, 2025 pm 07:21 PM

通过以下命令查看 MySQL 数据库:连接到服务器:mysql -u 用户名 -p 密码运行 SHOW DATABASES; 命令获取所有现有数据库选择数据库:USE 数据库名;查看表:SHOW TABLES;查看表结构:DESCRIBE 表名;查看数据:SELECT * FROM 表名;

Navicat for MariaDB如何查看数据库密码? Navicat for MariaDB如何查看数据库密码? Apr 08, 2025 pm 09:18 PM

Navicat for MariaDB 无法直接查看数据库密码,因为密码以加密形式存储。为确保数据库安全,有三个方法可重置密码:通过 Navicat 重置密码,设置复杂密码。查看配置文件(不推荐,风险高)。使用系统命令行工具(不推荐,需要对命令行工具精通)。

navicat premium怎么创建 navicat premium怎么创建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 创建数据库:连接到数据库服务器并输入连接参数。右键单击服务器并选择“创建数据库”。输入新数据库的名称和指定字符集和排序规则。连接到新数据库并在“对象浏览器”中创建表。右键单击表并选择“插入数据”来插入数据。

mysql怎么复制表 mysql怎么复制表 Apr 08, 2025 pm 07:24 PM

在 MySQL 中复制表需要创建新表、插入数据、设置外键、复制索引、触发器、存储过程和函数。具体步骤包括:创建具有相同结构的新表。将数据从原始表插入新表。设置相同的外键约束(如果原始表有)。创建相同索引。创建相同触发器(如果原始表有)。创建相同存储过程或函数(如果原始表使用了)。

Navicat 无法连接 MySQL/MariaDB/PostgreSQL 等数据库的解决方法 Navicat 无法连接 MySQL/MariaDB/PostgreSQL 等数据库的解决方法 Apr 08, 2025 pm 11:00 PM

Navicat 无法连接数据库的常见原因及其解决方法:1. 检查服务器运行状态;2. 核对连接信息;3. 调整防火墙设置;4. 配置远程访问;5. 排除网络问题;6. 检查权限;7. 保障版本兼容性;8. 排除其他可能性。

navicat怎么新建连接mysql navicat怎么新建连接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通过以下步骤新建 MySQL 连接:打开应用程序并选择“新建连接”(Ctrl N)。选择“MySQL”作为连接类型。输入主机名/IP 地址、端口、用户名和密码。(可选)配置高级选项。保存连接并输入连接名称。

See all articles