暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

varchar类型在oracle和mysql中的区别

原创 会UI设计的dba 2025-02-27
145

在Oracle和MySQL中,VARCHAR(20)的定义确实存在一些关键区别,主要体现在长度单位、存储方式、最大限制等方面。以下是详细对比:


1. 长度单位的定义

数据库默认单位说明
Oracle字节(Byte)VARCHAR2(20) 表示最多存储20字节的数据,受字符集影响(如UTF-8中一个汉字占3字节)。
MySQL字符(Character)VARCHAR(20) 表示最多存储20个字符,无论字符编码(如UTF-8下汉字和字母均算1字符)。

示例场景

  • Oracle:若使用VARCHAR2(20)且字符集为AL32UTF8(UTF-8),存储"你好Hello"(2个汉字 + 5字母 = 2×3 + 5×1 = 11字节),可成功存入。

  • MySQLVARCHAR(20)存储"你好Hello",直接计算为7个字符(2汉字 + 5字母),未超出限制。


2. 最大长度限制

数据库最大允许长度说明
OracleVARCHAR2(4000)单字段最大支持4000字节(受字符集影响,实际字符数可能更少)。
MySQLVARCHAR(65535)理论最大长度为65535字节,但受行大小限制(通常实际最大为16383字符)。

3. 存储与填充行为

数据库存储方式说明
Oracle按实际长度存储,不填充空格存储数据时严格按输入长度保存,不会补空格。
MySQL按实际长度存储,不填充空格与Oracle一致,但早期版本(如MySQL 5.0之前)的CHAR会填充空格,VARCHAR不会。

4. 语法差异

  • Oracle

    • 主要使用VARCHAR2(推荐),VARCHARVARCHAR2的同义词,但未来可能被弃用。

    sql

    复制

    CREATE TABLE oracle_table (
        col1 VARCHAR2(20)  -- 推荐写法
    );
  • MySQL

    • 仅支持VARCHAR,无VARCHAR2

    sql

    复制

    CREATE TABLE mysql_table (
        col1 VARCHAR(20)
    );

5. 字符集的影响

  • Oracle

    • 若使用多字节字符集(如AL32UTF8),VARCHAR2(20)的20字节可能仅能存6个汉字(每个占3字节)。

    sql

    复制

    INSERT INTO oracle_table VALUES ('你好你好你好'); -- 6汉字 ×3=18字节 → 成功
    INSERT INTO oracle_table VALUES ('你好你好你好你'); -- 7汉字 ×3=21字节 → 失败(超出20字节)
  • MySQL

    • VARCHAR(20)始终以字符为单位,不受单个字符字节数影响。

    sql

    复制

    INSERT INTO mysql_table VALUES ('你好你好你好你好你好'); -- 10汉字 → 10字符 → 成功

6. 版本差异

  • Oracle

    • 从12c开始支持扩展数据类型(如VARCHAR2(32767)),但需显式启用。

    sql

    复制

    ALTER SYSTEM SET max_string_size = EXTENDED;
  • MySQL

    • 在5.0.3版本后,VARCHAR最大长度从255字符提升到65535字节(受行限制)。


总结:关键区别

特性Oracle (VARCHAR2)MySQL (VARCHAR)
长度单位字节(Byte)字符(Character)
最大长度4000字节~16383字符(UTF-8)
字符集影响直接影响可存储字符数量不影响字符数量,影响存储空间
推荐类型VARCHAR2VARCHAR

使用建议

  1. Oracle

    • 明确字符集需求,优先使用VARCHAR2

    • 若需按字符数限制,可使用CHAR或计算字节数(如VARCHAR2(20 CHAR)显式指定字符单位)。

  2. MySQL

    • 直接使用VARCHAR(N),无需担心字符集导致的字符数量变化。

    • 注意行大小限制(如ROW_FORMAT=DYNAMIC可提升单行容量)。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论