首页 > 数据库 >【SQL】varchar 与 char 的区别

【SQL】varchar 与 char 的区别

时间:2024-06-22 20:01:12浏览次数:20  
标签:CHAR VARCHAR String SQL example char 长度 varchar id

在 SQL 中,VARCHARCHAR 是用于存储字符串类型数据的两种数据类型,但它们在存储方式和性能上有显著的区别。

CHAR

  • 定义: CHAR 是一种固定长度的字符串数据类型。
  • 长度: 你需要在定义表结构时指定长度,例如 CHAR(10)
  • 存储方式: 无论实际存储的字符串长度是多少,都会占用固定的长度。如果存储的字符串长度小于指定长度,剩余的部分会用空格填充。
  • 性能: 由于是固定长度,在处理数据时性能通常比 VARCHAR 要快。
  • 适用场景: 适用于长度固定的字符串,如国家代码、身份证号等。
CREATE TABLE example_char (
    id INT,
    code CHAR(10)
);

VARCHAR

  • 定义: VARCHAR 是一种可变长度的字符串数据类型。
  • 长度: 你需要在定义表结构时指定最大长度,例如 VARCHAR(50)
  • 存储方式: 只存储实际的字符串长度,加上额外的字节用于存储字符串的长度信息。
  • 性能: 由于是可变长度,处理数据时需要额外的开销来计算实际长度,性能通常比 CHAR 稍慢。
  • 适用场景: 适用于长度不固定的字符串,如姓名、地址等。
CREATE TABLE example_varchar (
    id INT,
    description VARCHAR(255)
);

示例代码

下面是一个使用 JDBC 创建表并插入数据的示例,分别展示 CHARVARCHAR 类型的用法:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CharVarcharExample {
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/yourdatabase";
    private static final String JDBC_USER = "yourusername";
    private static final String JDBC_PASSWORD = "yourpassword";

    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
             Statement stmt = conn.createStatement()) {

            // 创建使用 CHAR 的表
            String createTableCharSQL = "CREATE TABLE IF NOT EXISTS example_char (" +
                                        "id INT AUTO_INCREMENT PRIMARY KEY," +
                                        "code CHAR(10))";
            stmt.executeUpdate(createTableCharSQL);
            System.out.println("Table with CHAR created.");

            // 插入数据到使用 CHAR 的表
            String insertCharSQL = "INSERT INTO example_char (code) VALUES ('ABC'), ('12345'), ('A')";
            stmt.executeUpdate(insertCharSQL);
            System.out.println("Data inserted into table with CHAR.");

            // 查询数据
            ResultSet rsChar = stmt.executeQuery("SELECT id, code FROM example_char");
            System.out.println("Data from table with CHAR:");
            while (rsChar.next()) {
                int id = rsChar.getInt("id");
                String code = rsChar.getString("code");
                System.out.println("ID: " + id + ", Code: '" + code + "'");
            }

            // 创建使用 VARCHAR 的表
            String createTableVarcharSQL = "CREATE TABLE IF NOT EXISTS example_varchar (" +
                                           "id INT AUTO_INCREMENT PRIMARY KEY," +
                                           "description VARCHAR(255))";
            stmt.executeUpdate(createTableVarcharSQL);
            System.out.println("Table with VARCHAR created.");

            // 插入数据到使用 VARCHAR 的表
            String insertVarcharSQL = "INSERT INTO example_varchar (description) VALUES ('Alice'), ('Bob'), ('Charlie')";
            stmt.executeUpdate(insertVarcharSQL);
            System.out.println("Data inserted into table with VARCHAR.");

            // 查询数据
            ResultSet rsVarchar = stmt.executeQuery("SELECT id, description FROM example_varchar");
            System.out.println("Data from table with VARCHAR:");
            while (rsVarchar.next()) {
                int id = rsVarchar.getInt("id");
                String description = rsVarchar.getString("description");
                System.out.println("ID: " + id + ", Description: '" + description + "'");
            }

            // 清理示例数据
            stmt.executeUpdate("DROP TABLE IF EXISTS example_char");
            stmt.executeUpdate("DROP TABLE IF EXISTS example_varchar");

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,展示了如何使用 CHARVARCHAR 创建表并插入数据。请根据需要调整数据库连接字符串、用户名、密码和 SQL 语句。

总结

  • CHAR: 固定长度,适合存储长度固定的字符串,性能较好。
  • VARCHAR: 可变长度,适合存储长度不固定的字符串,灵活性更高。

标签:CHAR,VARCHAR,String,SQL,example,char,长度,varchar,id
From: https://blog.csdn.net/hui_zai_/article/details/139756904

相关文章

  • 【SQL】in 和 exists 的区别
    在SQL中,IN和EXISTS都用于过滤查询结果,但它们在使用场景和性能方面有一些区别。下面是详细的解释:1.ININ操作符用于检查某个值是否存在于一个指定的列表或子查询的结果集中。IN常用于较小的数据集和静态值列表。语法SELECTcolumn1,column2FROMtable1WHERE......
  • SQL查找最晚入职员工的所有信息
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。入职最晚的员工信息(不一定只有一条)select*fromemployeesord......
  • mysql数据表插入数据后,获取自增字段值的方法
        mysql数据表如果有字段的值是自增的,即创建表时该字段使用了auto_increment,当插入数据时,获取该字段自增值的方法是selectLAST_INSERT_ID()或者select@@IDENTITY,这两种方法都是面向数据库连接(connection)的,即只要在同一个数据库连接(connection)中,往表中插入数据后,紧......
  • 安装mysql(版本:8.0.28)
    一、更新源和安装sudoaptupdate#更新源sudoaptinstallmysql-server#安装二、修改密码和权限sudomysql#登录mysql,使用root用户连入mysql,默认不需要密码ALTERUSER'用户名'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'明文密码';#修改密码Updateus......
  • pycharm中运行jupyter notebook
    进入anacondaprompt,进入对应的虚拟环境输入jupyternotebook,找到路径和token这两个随便复制一个,注意是包括token也要复制到然后打开pycharm,并建立一个jupyternotebook文件选择下面这个然后在里面输入刚刚复制的然后运行一个cell,会弹出输入刚刚复制jupyternote......
  • SqlserverCDCcrudSourceSink mssql数据实时同步demo
    packageorg.hu.fk.datastream_connector;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.ververica.cdc.connectors.base.options.StartupOptions;importcom.ververica.cdc.connectors.shaded.org.apache.kafka.connect.data.Fie......
  • MySQL-文件排序原理详解
    目录Usingfilesort文件排序原理详解filesort文件排序方式示例验证下各种排序方式:单路排序的详细过程:双路排序的详细过程:单路排序相对于双路排序具有以下特点:Usingfilesort文件排序原理详解filesort文件排序方式单路排序:是一次性取出满足条件行的所有字段,然后在s......
  • PostgreSQL的存储结构介绍
    PostgreSQL的存储结构介绍PostgreSQL是一个先进的开源关系型数据库管理系统,其存储结构设计非常复杂且高效。了解其存储结构有助于数据库管理员和开发人员更好地优化数据库的性能、设计数据模型以及进行故障排除。以下是PostgreSQL存储结构的详细概述。1.数据文件结构......
  • Docker部署MySQL8.3.0(保姆级图文教程)
    系列文章目录Docker部署Nginx1.21.5(保姆级图文教程)Docker部署MySQL8.3.0(保姆级图文教程)文章目录一、环境二、拉取镜像2.1查找DockerHub上的MySQL镜像2.2拉取MySQL镜像2.3查看MySQL镜像三、在宿主机创建目录3.1创建挂载目录3.2创建配置文件四、启动MySQL......
  • JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇
    JetBrainsPyCharm2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。JetBrainsPyCharm2024版获取PyCharm2024提供了丰富的代码编......