精华内容
下载资源
问答
  • oracle varchar2存汉字出现问题

    千次阅读 2016-11-10 17:12:30
    页面的remark备注字段在数据库中的长度为varchar2(4000),jsp页面校验长度的方式为: var valFlag = editForm.validate({ strucName:{name:'措施名称',notEmpty:true,trim:true,maxLength:256}, strategyName:{...

    一、场景:

    页面的remark备注字段在数据库中的长度为varchar2(4000),jsp页面校验长度的方式为:

    var valFlag = editForm.validate({
    strucName:{name:'措施名称',notEmpty:true,trim:true,maxLength:256},
    strategyName:{name:'策略',notEmpty:true,trim:true},
    remark:{name:'措施说明',trim:true,maxLength:4000}
    });

    这样就会出现一个问题,字段的长度在js这边校验通过了,于是就到了保存到数据库这一步了,结果出现了如下错误:


    二、原因及解决方法:

    数据库中的字段类型为varchar2(4000),js那边的editForm.validate校验的是字符的长度,而varchar2的4000代表的是字节长度,一个汉字有可能占用2或3个字节,所以会报错,为了避免oracle数据库编码改变导致出现占用3个字节的情况,这里统一除以3来作为校验的长度:

    var valFlag = editForm.validate({
    strucName:{name:'措施名称',notEmpty:true,trim:true,maxLength:85},
    strategyName:{name:'策略',notEmpty:true,trim:true},
    remark:{name:'措施说明',trim:true,maxLength:1333}
    });

    展开全文
  • 2、varchar多少汉字、数字?3、varchar的最大长度是多少呢?4、字符、字节、位,之间的关系?5、mysql字段类型存储需要多少字节?接下来请仔细看,整理不易啊。1、varchar(100)和varchar(10)的区别在哪里?一般...

    看完这篇文章,你能搞清楚以下问题:

    1、varchar(100)和varchar(10)的区别在哪里?

    2、varchar能存多少汉字、数字?

    3、varchar的最大长度是多少呢?

    4、字符、字节、位,之间的关系?

    5、mysql字段类型存储需要多少字节?

    接下来请仔细看,整理不易啊。

    1、varchar(100)和varchar(10)的区别在哪里?

    一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。

    但是深入一下,设计数据库的时候,二者一样吗?

    答案是否定的【至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度】并且二者在内存中的操作方式也是不同的,下面的例子中有体现(例子链接:看下面的例子。 )

    如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。但是有些数据库管理员会认为,反正Varchar数据类型是根据实际的需要来分配长度的。还不如给其大一点的呢。为此他们可能会为这个字段一次性分配200个字符的存储空间。这VARCHAR(100)与VARCHAR(200)真的相同吗?

    结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。如果不想看解释,我这里大概说下:假设VARCHAR(100)与VARCHAR(200)类型,实际存90个字符,它不会对存储端产生影响(就是实际占用硬盘是一样的)。但是,它确实会对查询产生影响,因为当MySql创建临时表(SORT,ORDER等)时,VARCHAR会转换为CHAR,转换后的CHAR的长度就是varchar的长度,在内存中的空间就变大了,在排序、统计时候需要扫描的就越多,时间就越久。

    所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度。

    ----------------------------------char------------------------------------------

    1、从碎片角度进行考虑,使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。

    2、考虑其长度的是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。比较典型的应用就是MD5哈希值。当利用MD5哈希值来存储用户密码时,就非常使用采用CHAR字符类型。因为其长度是相同的。另外,像用来存储用户的身份证号码等等,一般也建议使用CHAR类型的数据。

    另外请大家考虑一个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销char字符类型是没有的。

    ---------------------------------总结---------------------------------------------

    二者在磁盘上存储占的空间是一样的。区别有二。第一、一个变长一个固定长度。第二、在内存中的操作方式,varchar也是按照最长的方式在内存中进行操作的。比如说要进行排序的时候,varcahr(100)是按照100这个长度来进行的。

    2、varchar能存多少汉字、数字?

    具体还是要看版本的,一个字符占用3个字节   ,一个汉字(包括数字)占用3个字节=一个字符

    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节)

    5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

    UTF8编码中一个汉字(包括数字)占用3个字节

    GBK编码中一个汉字(包括数字)占用2个字节

    3、varchar的最大长度是多少呢?

    mysql的vachar字段的类型虽然最大长度是65535,但是并不是能存这么多数据,最大可以到65533,其中需要1到2个字节来存储数据长度(如果列声明的长度超过255,则使用两个字节来存储长度,否则1个)字节,当不允许非空字段的时候(因为要用一个字节来存储不可为空的标识),当允许非空字段的时候只能到65532(省下了存储非空的那个字节)。

    行中可以用的字节数如下计算:(参考文档:https://www.jianshu.com/p/ee1e4b14c5e7 )

    字段非空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) - 1 (null byte)=65531 字节可以用

    减1的原因是实际行存储从第二个字节开始';

    字段可以空时候:varchar(65535) -2 bytes (存储长度,按2个算) - 1byte (latin1类型) =65532 字节可以用

    根据这个最大字节数,以及编码方式,可以计算能存储的汉字数。

    4、字符、字节、位,之间的关系?

    1、位:

    数据存储的最小单位。每个二进制数字0或者1就是1个位;

    2、字节:

    8个位构成一个字节;

    即:1 byte (字节)= 8 bit(位);

    1 KB = 1024 B(字节);

    1 MB = 1024 KB;   (2^10 B)

    1 GB = 1024 MB;  (2^20 B)

    1 TB = 1024 GB;   (2^30 B)

    3、字符:

    a、A、中、+、*、の......均表示一个字符;

    一般 utf-8 编码下,一个汉字 字符 占用 3 个 字节;数字属于汉字,和汉字占用一样字节。

    一般 gbk 编码下,一个汉字  字符  占用 2 个 字节;

    5、mysql字段类型存储需要多少字节?

    数字类型

    列类型

    需要的存储量

    TINYINT

    1 字节

    SMALLINT

    2 个字节

    MEDIUMINT

    3 个字节

    INT

    4 个字节

    INTEGER

    4 个字节

    BIGINT

    8 个字节

    FLOAT(X)

    4 如果 X < = 24 或 8 如果 25 < = X < = 53

    FLOAT

    4 个字节

    DOUBLE

    8 个字节

    DOUBLE PRECISION

    8 个字节

    REAL

    8 个字节

    DECIMAL(M,D)

    M字节(D+2 , 如果M < D)

    NUMERIC(M,D)

    M字节(D+2 , 如果M < D)

    日期和时间类型

    列类型

    需要的存储量

    DATE

    3 个字节

    DATETIME

    8 个字节

    TIMESTAMP

    4 个字节

    TIME

    3 个字节

    YEAR

    1 字节

    串类型

    列类型

    需要的存储量

    CHAR(M)

    M字节,1 <= M <= 255

    VARCHAR(M)

    L+1 字节, 在此L <= M和1 <= M <= 255

    TINYBLOB, TINYTEXT

    L+1 字节, 在此L< 2 ^ 8

    BLOB, TEXT

    L+2 字节, 在此L< 2 ^ 16

    MEDIUMBLOB, MEDIUMTEXT

    L+3 字节, 在此L< 2 ^ 24

    LONGBLOB, LONGTEXT

    L+4 字节, 在此L< 2 ^ 32

    ENUM('value1','value2',...)

    1 或 2 个字节, 取决于枚举值的数目(最大值65535)

    SET('value1','value2',...)

    1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

    text与blob的区别在于:text不能存储图片。blob是二进制流,text是非二进制。

    mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念。

    展开全文
  • 汉字长度与编码有关 MySql 5.0 以上的版本: ...2、varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。 3、不知道好多博客这么写的。 但跟自测结果不一样 自测utf-8 1...

    汉字长度与编码有关

    MySql 5.0 以上的版本:

    1、一个汉字占多少长度与编码有关:

    UTF-8:一个汉字 = 3个字节,英文是一个字节

    GBK: 一个汉字 = 2个字节,英文是一个字节

    2、varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。

    3、不知道好多博客这么写的。 但跟自测结果不一样    自测utf-8

     

    1 注意

    utf8_general_ci 不区分大小写

    utf8_general_cs 区分大小写

    2 注意

    MySQL 5.6

    自测  utf8  utf8_general_ci   varchar(10)  ,char(10)

    都可以插入 10个汉字 , 或者10英文字   

    转载于:https://www.cnblogs.com/chxl800/p/10874437.html

    展开全文
  • mysql 数据库varchar存储汉字

    千次阅读 2018-09-27 18:19:52
    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能33个(每个汉字3字节)  5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放...

    具体还是要看版本的

    4.0版本以下,varchar(100),指的是100字节,如果存放UTF8汉字时,只能存33个(每个汉字3字节) 

    5.0版本以上,varchar(100),指的是100字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放100个。

    自己在数据库中建个表测试下可以放多少个汉字。

    示例:以5.0以上版本为例。

    新建表:

    CREATE TABLE varchar_test (

    `id` int(11) NOT NULL ,

    `string` varchar(20)

    ) ENGINE=InnoDB

    DEFAULT CHARACTER SET=utf8COLLATE=utf8_general_ci

    插入表

    INSERT INTO varchar_test (id, string)

    VALUES (1, '一二三四五六七八九十');

     

    INSERT INTO varchar_test (id, string)

    VALUES (2, '一二三四五六七八九十一二三四五六七八九十');

     

    INSERT INTO varchar_test (id, string)

    VALUES (3, '12345678901234567890');

     

    测试结果:

    1:一二三四五六七八九十

    2:一二三四五六七八九十一二三四五六七八九十

    3:12345678901234567890

     

    如果插入字符超过21个,则报错

    INSERT INTO varchar_test (id, string)

    VALUES (3, '123456789012345678901');

    [Err] 1406 - Data too long for column'string' at row 1

    可见MySQL的varchar(n)可以存储的中文字符数和英文字符数是一致的,都是n个字符

    展开全文
  • varchar255可以多少汉字

    万次阅读 2016-05-25 16:24:29
    4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字; MySQL | ver >= 4.1: VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR...
  • 2、varchar多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理不易啊。 1、varchar(100)和varchar(10)的区别在...
  • 目录 1简介... 1 2 准备...... 2.1 环境说明......3 安装......4 配置......5 使用......5.1 验证实验......5.2 问题分析......6 延展......6.1 varchar2长度与字符...6.2 nvarchar2存汉字... 5 7 总结... 6 Mysql UTF8 varchar与Oracl...
  • utf8编码的varcharMysql记录行数据是有限的。大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,...第一,当编码方式为utf-8时,varchar存到21845就存不下了.也就是最大长度是21844....
  • 2、varchar多少汉字、数字? 3、varchar的最大长度是多少呢? 4、字符、字节、位,之间的关系? 5、mysql字段类型存储需要多少字节? 接下来请仔细看,整理不易啊。 1、varchar(100)和varchar(10)的区别在哪里?...
  • 1、varchar(100)和varchar(10)的区别在哪里? 一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【不准确的想法:varchar在实际存储的时候会多一个byte用来存放长度】。 ...
  • 2、varchar多少汉字、数字?3、varchar的最大长度是多少呢?4、字符、字节、位,之间的关系?5、mysql字段类型存储需要多少字节?接下来请仔细看,整理不易啊。1、varchar(100)和varchar(10)的区别在哪里?一般...
  • mysql varchar到底能多少汉字

    千次阅读 2016-09-22 01:35:28
    在utf-8状态下,汉字最多可以 21844个字符串, 英文也为 21844个字符串。 在gbk状态下,汉字最多可以 32766个字符串,英文也为 32766个字符串。
  • 1、varchar(5)可以存储多少个汉字,多少个字母数字?相信有好多人应该跟我一样,对这个已经很熟悉了,根据经验我们能很快的做出决定,比如说用varchar(200)去存储url等等,但是,即使你用了很多次也很熟悉了,也有...
  • 先明白计算的一些规则限制4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),...
  • mysql varchar(128)可以多少汉字

    千次阅读 2018-06-05 16:33:00
    首先要确定mysql版本4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能16个(每个汉字3字节) 5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),...
  • 参考:https://www.cnblogs.com/zhuyeshen/p/11642211.html
  • MySQL 中的 VARCHAR(255) 可以存放 1 - 255 个 UTF-8 格式的汉字 ... latin1 字符集最多可以存放 85 个 UTF-8 格式的汉字 ... utf-8 字符集最多可以存放 255 个 UTF-8 格式的汉字 ... 如果谁可以找到一个占用两字节...
  • 2、varchar多少汉字、数字?3、varchar的最大长度是多少呢?4、字符、字节、位,之间的关系?5、mysql字段类型存储需要多少字节?接下来请仔细看,整理不易啊。1、varchar(100)和varchar(10)的区别在哪里?一般...
  • varchar(50)能50个中文汉字,其实就是不管是什么字符,中文也好英文也好,只能50个。 其实varchar类型可以存储多少个汉字,多少个数字,是要具体看我们的mysql版本,目前2020年使用的版本应该都是按照字符数来...
  • 实践出真知,在SQL中,nvarchar(50)表示汉字和英文都是50,varchar(50)汉字25,英文50 转载于:https://www.cnblogs.com/yanshaoxiong/p/6269871.html
  • Oracle 中 varchar2 到底能多少个 汉字: 原文链接:https://www.cnblogs.com/firstgreen/p/3586301.html 1. varchar2最大长度为4000字节。 2. varchar2的参数有两个:byte(默认), char 其中varchar2(10 ...
  • varchar(50)能50个汉字

    2016-04-15 10:39:00
    mysql 4.0版本以下,varchar(50), 指的是50字节,如果存放utf8汉字时,只能存放16个(每个汉字3字节) mysql 5.0版本以上,varchar(50), 指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行...
  • mysql varchar(50)到底能多少个汉字

    万次阅读 多人点赞 2017-10-25 11:25:11
    mysql 4.0版本以下,varchar(50), ...mysql 5.0版本以上,varchar(50), 指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。 可以自己建个表试试varchar(50)可以放多少汉字
  • select * from nls_database_parameters where parameter='NLS_CHARACTERSET';select length('中') from dual; 转载于:https://www.cnblogs.com/shenjun/p/3169835.html
  • ======================================...关系型数据库系统:表 一个数据库中可以有若干张表(形式上你可以看做日常生活中建立的表)字段 表里面的信息会分若干个栏目来,这些栏目呢,我们在数据库技术中叫"字段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 413
精华内容 165
关键字:

varchar存汉字