MariaDB CAST OR CONVERT Функция не работает - PullRequest
0 голосов
/ 29 мая 2020

в моей таблице есть столбец 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 

это des c результат

enter image description here

1 Ответ

0 голосов
/ 29 мая 2020

Это так, потому что оно происходит от MySQL, где не было опции CAST AS VARCHAR. В MySQL был только CAST AS CHAR, который производил VARCHAR. Вот какие поддерживаемые параметры были в MySQL 5.6:

https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html#function_cast

См. Они явно упоминают, что « Для значений короче, чем N символов". Позже MariaDB начала добавлять CAST AS VARCHAR только для того, чтобы сделать его более кроссплатформенным, совместимым с такими системами, как Oracle, Postgre, MS SQL, et c.:

https://jira.mariadb.org/browse/MDEV-11283

Но по-прежнему CAST AS CHAR и CAST AS VARCHAR одно и то же. И я думаю, так и должно быть. Зачем вам нужен тип данных фиксированной длины в ОЗУ? Это должно иметь значение только тогда, когда вы его сохраняете.

Например, если у вас есть таблица с типом данных CHAR:

    CREATE TABLE tbltest(col CHAR(10));

и вы вставляете приведенные как данные VARCHAR, например:

    INSERT INTO tbltest(col) VALUES(CAST('test' AS VARCHAR(5)));

он будет сохранен как тип данных CHAR (10). Потому что это то, что используется в таблице.

...