char,varchar,long varchar

本文详细解释了数据库中的三种字符类型:char、varchar 和 longvarchar 的特点与区别,包括它们的存储方式、长度范围及对性能的影响。
char是定长字符串(1-255)
varchar是非定长字符串(1-32672)
Long Varchar也是非定长字符串(1-32700)
char是最简单的,系统分配固定长度的空间给它,容易被系统调整空间,性能比较高;
Varchar必须要存在于一个Page之内,当varchar数据很常的时候,会形成一条记录跨页的现象,成为Overflow Page现象,这在作Reorgchk的时候是用来判断是否需要Reorg的一个参数,一旦形成跨页存储,性能将降低;

LongVarChar在Varchar的长度扩大至32672的时候已经没有太大的意义了,每个Longvarchar在记录中只占24个字节,估计是作为一种索引,真正的内容存放在单独的Page中,这样就可以达到很大的长度。这样的方式致使性能更加降低。


在 MySQL 中,将 `LONG` 类型(或 `BIGINT`)转换为 `VARCHAR` 类型,可以使用以下几种方法: --- ### **方法 1:使用 `CAST()` 函数** ```sql SELECT CAST(your_long_column AS CHAR) AS converted_value FROM your_table; ``` - `CAST(expr AS CHAR)` 将 `LONG`/`BIGINT` 转换为字符串。 --- ### **方法 2:使用 `CONVERT()` 函数** ```sql SELECT CONVERT(your_long_column, CHAR) AS converted_value FROM your_table; ``` - `CONVERT(expr, CHAR)` 功能与 `CAST()` 类似。 --- ### **方法 3:使用 `CONCAT()` 函数(隐式转换)** ```sql SELECT CONCAT(your_long_column, '') AS converted_value FROM your_table; ``` - 通过拼接空字符串 `''` 强制转换为字符串。 --- ### **方法 4:在 `INSERT` 或 `UPDATE` 时转换** 如果要在插入或更新时转换: ```sql INSERT INTO your_table (varchar_column) SELECT CAST(long_value AS CHAR) FROM source_table; UPDATE your_table SET varchar_column = CAST(long_value AS CHAR) WHERE condition; ``` --- ### **注意事项** 1. **数据截断风险** - `VARCHAR` 在 MySQL 中默认最大长度为 65,535 字节(受行大小限制)。 - 如果 `LONG` 值非常大(如 `BIGINT` 最大值 `9223372036854775807`),确保目标 `VARCHAR` 列长度足够(例如 `VARCHAR(20)`)。 2. **性能影响** - 在 `WHERE` 或 `JOIN` 中频繁转换可能导致索引失效,建议存储时直接使用字符串类型。 3. **反向转换** - 如果需要将 `VARCHAR` 转回 `LONG`,使用: ```sql SELECT CAST(varchar_column AS SIGNED) AS long_value FROM your_table; ``` --- ### **示例** 假设表 `test` 有一个 `BIGINT` 列 `id`,转换为 `VARCHAR`: ```sql -- 查询时转换 SELECT id, CAST(id AS CHAR) AS id_str FROM test; -- 创建新表存储转换结果 CREATE TABLE test_str AS SELECT id, CAST(id AS CHAR) AS id_str FROM test; ``` --- ### **总结** - 推荐使用 `CAST(column AS CHAR)` 或 `CONVERT(column, CHAR)` 进行显式转换。 - 注意目标字段长度和潜在的性能影响。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值