首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中,使用CAST()将VARCHAR转换为CHAR,但最终结果仍然是VARCHAR,而不是CHAR

问在MySQL中,使用CAST()将VARCHAR转换为CHAR,但最终结果仍然是VARCHAR,而不是CHAR
EN

Stack Overflow用户
提问于 2021-08-28 14:02:51
回答 1查看 710关注 0票数 1

我创建了一个表table1,其中一个列column1声明为VARCHAR(100) -

代码语言:javascript
复制
CREATE TABLE table1 (
    -> column1 VARCHAR(100)
    -> );
代码语言:javascript
复制
DESCRIBE table1;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| column1 | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

现在,我从table1创建了另一个表column2,其中创建了一个单一列column2,并通过将table1中的column1转换为CHAR(100)来声明它-

代码语言:javascript
复制
CREATE TABLE table2 AS 
    -> SELECT CAST(column1 AS CHAR(100)) AS column2
    -> FROM table1;
代码语言:javascript
复制
DESCRIBE table2;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| column2 | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

在这里,非常奇怪的是,即使在将VARCHAR(100)转换为CHAR(100)之后,声明仍然保持为VARCHAR(100)

现在,我想确保创建一个包含通过强制转换声明的列的新表确实有效。所以我试着把FLOAT传给DECIMAL,如下所示-

代码语言:javascript
复制
CREATE TABLE table3 (
    -> column3 FLOAT
    -> );
代码语言:javascript
复制
DESCRIBE table3;
+---------+-------+------+-----+---------+-------+
| Field   | Type  | Null | Key | Default | Extra |
+---------+-------+------+-----+---------+-------+
| column3 | float | YES  |     | NULL    |       |
+---------+-------+------+-----+---------+-------+
代码语言:javascript
复制
CREATE TABLE table4 AS 
    -> SELECT CAST(column3 AS DECIMAL) AS column4
    -> FROM table3;
代码语言:javascript
复制
DESCRIBE table4;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| column4 | decimal(10,0) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+

在这里,FLOAT被正确地抛给了DECIMAL。所以为什么我不能把VARCHAR投给CHAR。另外,如果将VARCHAR转换为CHAR不起作用,为什么我没有收到任何错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-28 14:50:33

在这里,非常奇怪的是,即使将VARCHAR(100)转换为CHAR(100),声明仍然保持为VARCHAR(100)

这不是什么奇怪的行为。很明显是记录在案

  • 夏尔(北)

生成具有VARCHAR数据类型的字符串。除了表达式expr为空(零长度)外,结果类型为CHAR(0)。

我是第一个承认这是违反直觉的,但这是MySQL的工作方式。如果您想要一个char(),那么要么创建带有该类型的表并将其插入其中,要么在之后修改它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68965069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档