Mariadb
為什麼我的數據庫名稱被截斷?
我正在使用 MariaDB v5.x 並希望在查詢中返回一個長數據庫名稱。我可以通過一個簡單的查詢成功地做到這一點,但是通過更複雜的查詢,數據庫名稱會被截斷
$$ 34 characters $$. 為什麼會發生這種情況,有沒有辦法檢索完整的、未截斷的名稱? 此範例查詢有效:
SELECT DATABASE() as 'database', hour as 'hour' FROM time WHERE hour = 1;
但是,這種類型的查詢返回截斷的數據庫名稱:
SELECT DATABASE() as 'database', t.hour as 'hour', d.day as 'day' FROM time t, day d WHERE t.day_pk = day.pk AND t.hour = 1 AND d.day = 22 UNION ALL SELECT DATABASE() as 'database', t.hour as 'hour', d.day as 'day' FROM time t, day d WHERE t.day_pk = day.pk AND t.hour = 1 AND d.day = 24;
感謝您的任何/所有幫助。
D.
我可以確認即使在 MariaDB 10.7.1 中也存在相同的行為。
截斷似乎在
UNION
使用時發生。這是一種解決方法 - 使用該
substring
函式來指示您想要全長:SELECT substring(database() FROM 1 FOR length(database())) AS "database" UNION ALL SELECT substring(database() FROM 1 FOR length(database()));
確認@dbdemon 發布的內容是所有版本中都存在的錯誤。使用
--column-type-info
顯示了更多關於正在發生的事情的洞察力。$ db=$(printf 'a%.0s' {1..40}) $ echo $db aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa $ podman run -d --rm -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -e MYSQL_DATABASE=$db -e MYSQL_USER=u -e MYSQL_PASSWORD=p --name m55 mariadb:5.5 1b2c0740bf664b8a3da8071bb96234a86fe8dd5f3eb6348598f5d0c2b59ede56 $ podman exec -ti m55 mysql -u u -pp --column-type-info -e 'select database() as "database" union all select database()' $db Field 1: `database` Catalog: `def` Database: `` Table: `` Org_table: `` Type: VAR_STRING Collation: latin1_swedish_ci (8) Length: 34 Max_length: 34 Decimals: 0 Flags: +------------------------------------+ | database | +------------------------------------+ | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | +------------------------------------+ $ podman exec -ti m55 mysql -u u -pp --column-type-info -e 'select database()' $db Field 1: `database()` Catalog: `def` Database: `` Table: `` Org_table: `` Type: VAR_STRING Collation: latin1_swedish_ci (8) Length: 34 Max_length: 40 Decimals: 31 Flags: +------------------------------------------+ | database() | +------------------------------------------+ | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | +------------------------------------------+
從程式碼中我們可以看到 34 來自MAX_FIELD_NAME而不是來自系統表中各種定義的64 NAME_CHAR_LEN 。
Db
這些類型的錯誤很容易修復。請報告它們(無論是否容易)。
更新:已在 10.2.42+、10.3.33+、10.4.23+、10.5.14+、10.6.6+、10.7.2+ 和 10.8.0+ 中修復