mysql和oracle的一个汉字占几个字符

以前一直使用oracle11g,一个汉字占3个字节,所以在操作mysql时也一直这样分配长度。

今天测试了下发现不对了

可以看到第一个的长度确实是15,但是第二个为什么是5?

在网上找到资料:char_length计算的是字符长度,而length计算的是字节长度,刚好我使用的是utf8,一个汉字占3个字节,占一个字符。

那好了,应该是对的上了,可是好奇心我就试了下

为什么这是相同的?因为这不是汉字

好了,现在知道原来mysql和oracle一样的,但是又看到一篇说mysql的varchar与oracle的varchar2是不一样的,前者是用字符做单位的,后者是用字节做单位的。对于oracle11g的varchar2是用字节做单位的在以前玩oracle时测试过,但是mysql就没有测试过,好吧现在测试下。我先将字段长度改小看下能不能给容下,测试结果确实是可以的,证明mysql的varchar是用字符做单位的,这里就不贴图了,大家可以自己验证下。

总结:oracle 中varchar2(10)  既10个字节3个汉字

mysql  中varchar(10) 既10个字符10个汉字

所以现在可以将mysql的varchar字段减小1/3了,性能也能提高哦。

时间: 2024-12-23 06:06:10

mysql和oracle的一个汉字占几个字符的相关文章

java梳理-一个汉字占多大空间

面试题:一个汉字占多大空间. 事实上这个问题我了解不深的,知道结论不知道为什么.借此梳理下认识. 先回想下java基本类型 一基本类型 :简称四类八种,声明变量的同一时候分配了空间.举比例如以下: Int a =1;一.4种整型     byte      1字节           -128--127     short     2 字节         -32,768 -- 32,767     int       4 字节          -2,147,483,648 --2,147,4

JS判断字符串长度(英文占1个字符,中文汉字占2个字符)

//计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else { len ++; } } return len; } 方法二: function strlen(str){

Java一个汉字占几个字节(详解与原理)(转载)

1.先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个.3个.4个字节: 2.以下是源码: 1 @Test 2 public void test1() throws UnsupportedEncodingException { 3 String a = "名"; 4 System.out.println("UTF-8编码长度:"+a.getBytes("UTF-8").length); 5 Sys

Android EditText 文本长度限制(按照一个汉字占俩长度 类似字节)

Android EditText 文本长度限制有很简单的一种限制方式:在xml布局文件中对EditText添加 Android:maxLength="N" 但是这种简单的方式可能有时候不能满足某些比较较真的需求,这个时候就需要用别的的方式去限制长度了. 也就是通过InputFilter来实现: private class NameLengthFilter implements InputFilter { int MAX_EN; String regEx = "[\\u4e00

转:细说一个汉字等于几个字符,以及汉字,字符,字节,位之间的关系

全文主旨总结: 一:        1个汉字 = 1个字 = 1个字符 二:        1个字符 = 1个字节 = 8bit(ACSII码下) 三:        1个字符 = 2个字节 = 16bit(Unicode码下) 四:        一般在处理汉字时,会默认将 编码方式调整为Unicode码,因为这样 数据容纳范围更大,不易出现乱码. 参考资料: 网址: http://www.lovetofang.net/index.php/22.html

一个汉字在数据库占几个字节

项目中oracle10g数据库表字段为varchar(n)类型,存英文很简单,只要字母个数不大于n即可.但是对于汉字,按照同样的方法就不行了.因为对于汉字不同的字符集,在数据库占用的字节是不一样的.UTF-8字符集,一个汉字占三个字节,gbk字符集,一个汉字占两个字节,比如varchar(10)类型的字段,UTF-8的汉字,只能存3个,gbk字符集的汉字却能存5个.所以在程序中根据表字段varchar的大小,保存或更新时作出必要的校验否则后台会报错.办法:1.用表格 maxlength属性,比如

系统存储之:一个汉字在数据库占几个字节

参考文献:http://csumissu.iteye.com/blog/1090053 UTF-8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码.UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强.UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示.如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们

mysql5.1中utf8编码下一个汉字占用一个char的疑惑

最近发现Oracle和MySQL的字段长度的计算不一样(都是UTF8编码),比如: 在Oracle下定义:name varchar2(10) ,name字段能存放:10个字符或3个汉字 在MySQL下定义:name varchar(10),name字段能存放:10个字符或10个汉字 从上面可以得知:在oracle下,1个汉字=3个字节 为什么在 MySQL 下,1个汉字=1个字节 呢?? 经查,说:MySQL5 以后 varchar 的单位是字符了,而 oracle 的varchar2 是字节

python中一个汉字点3个字节? utf-8

今天发现了一个汉字占了3个字节,一开始以为是两个呢,字符串切片时总出现乱码,后来才发现一个中文占3个字节.这才解决了乱码问题 原来  1. utf-8 编码中,一个汉字占三个字节.英文字母是一个占用一个字节. 参考链接:https://blog.csdn.net/cadi2011/article/details/82048702 我发现python里面,汉子的长度,一个是占3个 1.难道是因为 utf-8的话一个汉子是占用了3个字节 2.反正今天顺着一个bug,想看看字符串的长度,结果一串英文,