【小东西】 字符串形式的加载条

本文介绍了一种在网页中实现加载条的方法,通过一段简洁的JavaScript代码,可以根据加载进度动态展示加载条的状态,包括已完成和未完成的部分。该方法允许自定义加载条的样式和长度,适用于多种场景。

加载条

一般来说,加载条就是可以让用户看到目前的加载情况,最重要的是知道当前状态所需要加载的总量,以及目前加载的量。
在网页加载的过程中,可以让某样东西在加载之后完成一个回调,使加载的总数+1。直到所有的东西都加载完毕(100%)

这小段代码的目的

输入0-1之间的数字(加载情况),并且输入所需要的加载条的最高字数,返回一个字符串形式的加载条

let logProgress = (progress, maxBlock, fill = '■', blank = '□') => {
    const fillNumber = Math.floor(progress*maxBlock);// 已经加载的方块个数
    const blankNumber = maxBlock - fillNumber;// 还未加载的方块个数
    let fillArr = []; // 所有已加载的方块
    for (let i = 0; i < fillNumber; i++) {
        fillArr.push(fill);
    }
    let blankArr = [];// 所有未加载的方块
    for (let j = 0; j < blankNumber; j++) {
        blankArr.push(blank);
    }
    let textArr = fillArr.concat(blankArr);// 将已加载的和未加载的两个方块数组连接起来
    let text = textArr.join('');// 将数组变为字符串
    console.log('%c'+text+'已加载'+Math.round(progress*100)+'%','color:green;font-size:15px;');
    return text; // 返回
};

使用

使用就非常简单了,第一个参数与第二个参数是必须的,后面已加载与还未加载的显示字符是可选项
比如:

logProgress(0.5,20);

在控制台的显示是这样的:
字符串加载条
尝试一下不同的加载字符:

logProgress(0.3,10,'※','×')

表现如下:
在这里插入图片描述
角角兔towrabit头像缩放100宽度

  • 这里是角角兔 towrabbit
  • 欢迎点赞评论哦
<think>我们正在解决一个具体问题:使用DBeaver查询MySQL中varchar(4000)字段存储的长字符串时,展示的不是数据本身,而是类似对象地址的内容(例如:java.lang.String@1a2b3c4d)。 分析原因: 1. 这种现象通常出现在使用JDBC连接数据库时,当字段内容过长,某些JDBC驱动或数据库客户端可能会截断长文本,并以对象引用的形式展示(尤其是当被当作对象处理时)。 2. DBeaver默认对长文本字段设置了显示限制,当字段内容超过一定长度时,可能以某种摘要形式(如哈希值)或对象引用形式展示,而不是完整内容。 解决方案: 步骤1:检查DBeaver的字段显示设置 - 在DBeaver中,可以通过修改数据查看器的设置来调整长字符串的显示方式。 - 具体操作:在DBeaver的菜单栏选择“窗口” -> “首选项” -> “编辑器” -> “数据编辑器” -> “数据展示”。 - 在“长文本展示限制”部分,找到“字符串最大长度”设置。默认可能是10000(即10KB)或者更小。尝试将这个值调大(比如设置为4000000以适应4MB的文本),或者直接设置为0(表示无限制)。 - 同时,确保“使用内容过滤器”选项未被勾选(特别是如果它被设置为按某种规则过滤的话)。 步骤2:检查JDBC驱动设置 - 在DBeaver中,右键点击数据库连接,选择“编辑连接”。 - 在“驱动属性”选项卡中,查找与长文本处理相关的属性,例如: `jdbc:mysql://host:port/database?sessionVariables=sql_mode=''` - 特别关注以下属性(如果有): `maxAllowedPacket`:这个属性控制MySQL服务器和客户端之间传输的最大数据包大小。如果设置过小,大文本会被截断。建议在连接URL中增加`maxAllowedPacket`参数,例如: `jdbc:mysql://host:port/database?maxAllowedPacket=16777216` (设置成16MB) `useBlobToStoreUTF8OutsideBMP`:如果字段中包含4字节的UTF-8字符(如emoji),可能需要将这个属性设为true(但这不是我们当前问题的重点)。 步骤3:检查字段实际内容 - 为了确保不是数据本身的问题,我们可以使用SQL函数检查字段内容。例如,使用`LENGTH(column)`查看字节长度,使用`CHAR_LENGTH(column)`查看字符数。如果长度超过4000,则可能被截断(但根据引用[2],varchar(4000)在插入时如果超过长度会被截断,所以存储的内容不会超过4000字符)。 - 另外,使用`HEX(column)`查看十六进制表示,确认是否存储的是二进制数据(但varchar存储的是文本,所以通常不会)。 步骤4:调整查询结果展示方式 - 在DBeaver的SQL编辑器中,尝试将结果集视图切换为“文本”模式(而不是表格模式)。有时表格模式对于长文本展示不友好。 - 在结果集中,双击该字段,会打开一个文本编辑器,完整展示内容。 步骤5:检查字符集问题(虽然之前的问题中已经讨论过,但这里也可能出现) - 确保数据库、表和字段的字符集设置正确,并且与DBeaver连接使用的字符集一致。可以在DBeaver中执行: ```sql SHOW VARIABLES LIKE 'character_set%'; ``` 查看相关字符集设置。 如果以上步骤还不能解决问题,考虑以下可能性: - 数据本身在存储时就已经被错误地存储为对象引用(比如应用程序错误地将对象的toString()结果存入数据库,而该对象的toString()返回的是类似`java.lang.String@1a2b3c4d`的字符串)。这时需要检查应用程序的代码。 根据引用[2]中提到:varchar类型在创建时指定最大长度,如果超过会被截断。所以,如果存储的是正常的字符串,不应该出现对象地址的形式。因此,如果数据库里存储的确实是对象地址形式字符串,那可能是应用程序写入的问题。 结论: 1. 首先调整DBeaver的显示设置(步骤1和4)。 2. 然后检查JDBC连接设置(步骤2)。 3. 通过SQL查询确认实际存储的内容(步骤3)。 4. 如果实际存储的就是对象地址字符串,则需要检查应用程序的写入逻辑。 相关问题: 1. 如何调整DBeaver以完整显示大文本字段(如TEXT、BLOB)? 2. MySQL中varchar字段的最大长度限制是多少?与字符集有什么关系? 3. 在DBeaver中如何查看和修改数据库连接的驱动属性? 4. 如何解决JDBC连接MySQL时的大数据包传输问题? </think>### 解决 DBeaver 查询 varchar(4000) 字段显示异常问题 当 DBeaver 查询 MySQL 的 `varchar(4000)` 字段时显示类似对象地址(如 `java.lang.String@1a2b3c4d`),通常由以下原因导致: #### 一、核心原因分析 1. **DBeaver 的长文本截断机制** DBeaver 默认对长文本字段启用**摘要模式**(Preview Mode),超出阈值时会显示哈希值而非原始数据[^2]。 2. **JDBC 驱动配置问题** MySQL JDBC 驱动的 `useCursorFetch` 或 `maxAllowedPacket` 参数设置不当,可能导致数据传输异常。 3. **字符集解码错误** 客户端与数据库字符集不匹配时,二进制数据可能被解析为对象引用格式(常见于存储了非文本数据)[^1]。 #### 二、解决方案步骤 ##### 步骤 1:禁用 DBeaver 文本摘要模式 1. 打开 DBeaver → 窗口 → 首选项 → **数据库 → 数据显示** 2. 修改以下配置: - **长文本展示限制**:设为 `0` (无限制) - **字符串最大长度**:设为 `1000000`(大于 4000) - 取消勾选 **"在网格中显示长值摘要"** ```mermaid graph LR A[首选项] --> B[数据库] B --> C[数据显示] C --> D[设置长文本限制为0] ``` ##### 步骤 2:强制完整数据读取 在 SQL 编辑器中执行: ```sql /*+ MAX_EXECUTION_TIME(60000) */ SELECT TRIM(TRAILING ' ' FROM your_column) AS full_content -- 清除尾部空格[^5] FROM your_table WHERE id = xxx; ``` > 提示:`/*+ ... */` 是 MySQL 的优化器提示,确保完整加载数据 ##### 步骤 3:检查 JDBC 连接参数 在 DBeaver 连接设置中: 1. 编辑连接 → 驱动属性 2. 添加以下参数: ``` useCursorFetch=true maxAllowedPacket=1073741824 # 1GB 数据包限制 characterEncoding=UTF-8 ``` ##### 步骤 4:验证实际存储内容 ```sql SELECT LENGTH(your_column) AS byte_length, -- 实际字节数 HEX(SUBSTRING(your_column, 1, 100)) AS hex_sample -- 十六进制检查 FROM your_table; ``` - 若 `hex_sample` 显示 `4A6176612E6C616E67...`(即 "Java.lang" 的十六进制),说明存储的是对象地址字符串本身 #### 三、高级排查 | **现象** | **解决方案** | |------------------------|-----------------------------------------| | 显示 `BLOB@1a2b3c` | 在查询中显式转换:`CAST(your_column AS CHAR)` | | 仅部分数据显示 | 调整 `net_buffer_length` 连接参数 | | 包含非法字符(�) | 转换字符集:`CONVERT(your_column USING utf8mb4)`[^1] | > **关键提示**:若确认存储的是对象地址字符串(如 `java.lang.String@...`),说明数据**写入时已异常**,需检查应用程序的写入逻辑而非查询端[^2]。 #### 相关问题 1. 如何在 DBeaver 中正确处理超过 4MB 的 `TEXT` 类型字段? 2. JDBC 连接参数 `useCursorFetch` 和 `useServerPrepStmts` 对长文本查询有何影响? 3. MySQL 中 `varchar(4000)` 与 `text` 类型的性能差异及选择标准? 4. 如何批量修改 MySQL 所有 `varchar` 字段的字符集为 `utf8mb4`? ➥ `参考引用[3]的方法` 5. 为什么 `varchar` 字段尾部空格会影响查询结果?如何避免? ➥ `参考引用[5]的解决方案`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值