我的表有一个varchar(64)列,当我尝试将它转换为char(36)时,它不起作用。
SELECT
CONVERT('00edff66-3ef4-4447-8319-fc8eb45776ab',CHAR(36)) AS A,
CAST('00edff66-3ef4-4447-8319-fc8eb45776ab' AS CHAR(36)) as B 这是desc结果

发布于 2020-05-29 17:24:12
它是这样的,因为它是从MySQL派生的,其中没有强制转换为VARCHAR选项。在MySQL中,仅强制转换为生成VARCHAR的CHAR。以下是MySQL 5.6中支持的选项:
https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html#function_cast
请看他们明确提到的“小于N个字符的值不会出现填充”。后来,MariaDB开始添加CAST AS VARCHAR,只是为了使其与Oracle、Postgre、MSSQL等系统更具跨平台兼容性:
https://jira.mariadb.org/browse/MDEV-11283
但仍然强制转换为CHAR和强制转换为VARCHAR是相同的。我想应该是一样的。为什么需要在RAM中使用固定长度数据类型?只有当你存储它的时候,它才重要。
例如,如果您有一个CHAR数据类型的表:
CREATE TABLE tbltest(col CHAR(10));然后将casted插入为VARCHAR数据,例如:
INSERT INTO tbltest(col) VALUES(CAST('test' AS VARCHAR(5)));它将存储为CHAR(10)数据类型。因为这就是表所使用的。
https://stackoverflow.com/questions/62080836
复制相似问题