mysql中文占几个char_数据库中一个汉字占几个字符?

mysql中文占几个char_数据库中一个汉字占几个字符?展开全部如果你说的“字符”就是指Java中的char,那好,那它就是16位,2字节。e69da5e887aa3231313335323631343130323136353331333431366262如果你说的“字符”是指我们用眼睛看到的那些“抽象的字符”,那么,谈论它占几个字节是没有意义的。具体地讲,脱离具体的编码谈某个字符占几个字节是没有意义的。就好比有一个抽象的整数“42”,你说…

大家好,又见面了,我是你们的朋友全栈君。

展开全部

如果你说的“字符”就是指 Java 中的 char,那好,那它就是 16 位,2 字节。e69da5e887aa3231313335323631343130323136353331333431366262

如果你说的“字符”是指我们用眼睛看到的那些“抽象的字符”,那么,谈论它占几个字节是没有意义的。具体地讲,脱离具体的编码谈某个字符占几个字节是没有意义的。

就好比有一个抽象的整数“42”,你说它占几个字节?这得具体看你是用 byte,short,int,还是 long 来存它。

用 byte 存就占一字节,用 short 存就占两字节,int 通常是四字节,long 通常八字节。

当然,如果你用 byte,受限于它有限的位数,有些数它是存不了的,比如 256 就无法放在一个 byte 里了。

e8b82a5d52908477fe2054a9deb65744.png

字符是同样的道理,如果你想谈“占几个字节”,就要先把编码说清楚。同一个字符在不同的编码下可能占不同的字节。

就以你举的“字”字为例,“字”在 GBK 编码下占 2 字节,在 UTF-16 编码下也占 2 字节,在 UTF-8 编码下占 3 字节,在 UTF-32 编码下占 4 字节。不同的字符在同一个编码下也可能占不同的字节。

“字”在 UTF-8 编码下占3字节,而“A”在 UTF-8 编码下占 1 字节。(因为 UTF-8 是变长编码),而 Java 中的 char 本质上是 UTF-16 编码。而 UTF-16 实际上也是一个变长编码(2 字节或 4字节)。

如果一个抽象的字符在 UTF-16 编码下占 4 字节,显然它是不能放到 char 中的。换言之, char 中只能放 UTF-16 编码下只占 2 字节的那些字符。而 getBytes 实际是做编码转换,你应该显式传入一个参数来指定编码,否则它会使用缺省编码来转换。

你说“ new String(“字”).getBytes().length  返回的是3 ”,这说明缺省编码是 UTF-8.

如果你显式地传入一个参数,比如这样“ new String(“字”).getBytes(“GBK”).length ”,那么返回就是 2。你可以在启动 JVM 时设置一个缺省编码,假设你的类叫 Main,那么在命令行中用 java 执行这个类时可以通过 file.encoding 参数设置一个缺省编码。

比如这样:java -Dfile.encoding=GBK Main

这时,你再执行不带参数的 getBytes() 方法时,new String(“字”).getBytes().length  返回的就是 2 了,因为现在缺省编码变成 GBK 了。

当然,如果这时你显式地指定编码,new String(“字”).getBytes(“UTF-8”).length  返回的则依旧是 3.

否则,会使用所在操作系统环境下的缺省编码。

通常,Windows 系统下是 GBK,Linux 和 Mac 是 UTF-8.

但有一点要注意,在 Windows 下使用 IDE 来运行时,比如 Eclipse,如果你的工程的缺省编码是 UTF-8,在 IDE 中运行你的程序时,会加上上述的 -Dfile.encoding=UTF-8 参数,这时,即便你在 Windows 下,缺省编码也是 UTF-8,而不是 GBK。

由于受启动参数及所在操作系统环境的影响,不带参数的 getBytes 方法通常是不建议使用的,最好是显式地指定参数以此获得稳定的预期行为。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153157.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 系统管理命令crontab

    系统管理命令crontab

    2021年6月6日
    122
  • 分子生物学词汇(L~O)

    分子生物学词汇(L~O)                lacoperon 乳糖操纵子                laccase 漆酶                lacmus 石蕊                lactalbumin 乳白蛋白,乳清蛋白                lactam 内酰胺                lactamase 内酰胺酶                la

    2022年7月11日
    45
  • SQL datetime和smalldatetime区别

    SQL datetime和smalldatetime区别datetime存储大小8个字节,精确到分后的3为小数,日期范围从1753年1月1日到9999年12月31日;而smalldatetime存储大小为4个字节,精确到分,日期范围从1900年1月1日到2079年6月6日。参考http://msdn.microsoft.com/zh-cn/library/ms187819%28v=…

    2022年7月27日
    3
  • 如何将 apache2 URL 映射到 /var/www/ 以外的目录

    如何将 apache2 URL 映射到 /var/www/ 以外的目录

    2021年4月28日
    116
  • 【经典算法大全】收集51种经典算法 初学者必备

    【经典算法大全】收集51种经典算法 初学者必备《经典算法大全》是一款IOS平台的应用。里面收录了51种常用算法,都是一些基础问题。博主觊觎了好久,可悲哀的是博主没有苹果,所以从网上下了老奔的整理版并且每个都手敲了一遍。虽然网上也有博客贴了出来,但是自己写写感觉总是好的。现在分享个大家。代码和运行结果难免有出错的地方,请大家多多包涵。 1.河内之塔(汉诺塔)2.费式数列3.巴斯卡三角形4.三色棋5.老鼠走迷宫(1

    2022年5月29日
    26
  • docker搭建apache php环境步骤总结「建议收藏」

    docker搭建apache php环境步骤总结「建议收藏」#拉取容器dockerpulldaocloud.io/sectest/php-apache:master-ca84461#创建容器dockerrun-d-it-p 8888:80 –nameapache_php-v/var/www/html:/var/www/htmldaocloud.io/sectest/php-apache:master-ca84461/bin/sh…

    2022年7月12日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号