gpt4 book ai didi

mysql - MySQL View 中的 BLOB 而不是正确的数据

转载 作者:行者123 更新时间:2023-11-29 01:12:27 24 4
gpt4 key购买 nike

我使用 UNION ALL 从两个表中创建了一个 MySQL View ,这样我就可以为这些表中的相同数据获得相同的列名(即 tbl1.author2 AS translator ... tbl2.translator AS translator) 等等,问题是当我试图从那个 View 中选择一些东西时,一半的数据以 BLOB 的形式出现,而不是原来的值。

View 定义是:

SELECT e.id AS prod_id, 
e.price_vat AS price_vat,
e.product AS title,
e.authors AS author,
e.isbn AS isbn,
e.ean AS ean,
e.page_count AS page_count,
e.publishers AS publishers,
e.issue_year AS issue_year,
'e' AS type
FROM ama_euromedia_products AS e
UNION ALL
SELECT
k.publishers AS publishers,
DATE_FORMAT(k.publication_date, '%Y') AS issue_year,
k.ean AS ean,
k.number_of_pages AS page_count,
k.author AS author,
k.isbn AS isbn,
k.title_full AS title,
k.price_amount AS price_vat,
k.internal AS prod_id,
'k' AS type
FROM ama_kosmas_products AS k

表格定义:

CREATE TABLE `ama_euromedia_products` (
`id` int(9) NOT NULL,
`product` text COLLATE utf8_czech_ci NOT NULL,
`isbn` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`authors` text COLLATE utf8_czech_ci,
`publishers` text COLLATE utf8_czech_ci,
`price` float(9,0) DEFAULT NULL,
`price_vat` float(9,0) DEFAULT NULL,
`vat` int(3) DEFAULT NULL,
`availability` tinyint(1) DEFAULT NULL,
`genres` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`ean` bigint(14) DEFAULT NULL,
`page_count` int(7) DEFAULT NULL,
`issue_year` int(4) DEFAULT NULL,
`supply_date` timestamp NULL DEFAULT NULL,
`width` int(7) DEFAULT NULL,
`height` int(7) DEFAULT NULL,
`weight` int(7) DEFAULT NULL,
`binding` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`long_v` text COLLATE utf8_czech_ci,
`short` text COLLATE utf8_czech_ci,
`imgurl` text COLLATE utf8_czech_ci,
`is_preliminary` tinyint(1) DEFAULT NULL,
`stack_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`invoice_only` tinyint(1) DEFAULT NULL,
`new` tinyint(1) DEFAULT NULL,
`sale` tinyint(1) DEFAULT NULL,
`return_v` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `indexy` (`id`,`isbn`,`genres`,`ean`,`issue_year`,`supply_date`,`stack_date`,`new`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;


CREATE TABLE `ama_kosmas_products` (
`id` int(7) NOT NULL AUTO_INCREMENT,
`internal` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`isbn` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`ean` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`contained_items` text COLLATE utf8_czech_ci,
`title_original` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`title_full` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`subtitle` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`other_text` text COLLATE utf8_czech_ci,
`languages` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`author` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`illustrator` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`translator` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`number_of_pages` int(7) DEFAULT NULL,
`subject_scheme_name` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`subject_code` int(7) DEFAULT NULL,
`subject_heading_text` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`media_file_label` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`media_file_thumbnail` varchar(255) COLLATE utf8_czech_ci DEFAULT NULL,
`publishers` text COLLATE utf8_czech_ci,
`publishing_status` tinyint(2) DEFAULT NULL,
`publication_date` timestamp NULL DEFAULT NULL,
`product_availability` tinyint(2) DEFAULT NULL,
`on_hand` int(7) DEFAULT NULL,
`on_order` int(7) DEFAULT NULL,
`price_amount` int(7) DEFAULT NULL,
`price_tax_rate_code` varchar(1) COLLATE utf8_czech_ci DEFAULT NULL,
`price_tax_rate_percent` tinyint(2) DEFAULT NULL,
`price_tax_amount` int(7) DEFAULT NULL,
`price_taxable_amount` int(7) DEFAULT NULL,
`reissue_date` timestamp NULL DEFAULT NULL,
`invoice_only` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `internal` (`internal`)
) ENGINE=MyISAM AUTO_INCREMENT=43341 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

知道为什么会这样吗?

最佳答案

当您使用 UNION 创建 View 时,您必须确保相应列的数据类型相同(或者至少相似到足以将一个转换为另一个) .在当前情况下, View 的第一列是 publishersprice_vat,除了 BLOB 之外,没有任何数据类型定义可以做很多的感觉。

如果你真的需要这个作为 View ,你可以尝试...

SELECT e.price_vat AS price_vat, 
NULL AS publishers,
...etc...
'e' AS type
FROM ama_euromedia_products AS e;
UNION ALL
SELECT
NULL AS price_vat,
k.publishers AS publishers,
...etc...
'k' AS type
FROM ama_kosmas_products AS k;

将单一数据类型放入每一列。

关于mysql - MySQL View 中的 BLOB 而不是正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com